visual c++ anfängerproblem



  • Leute ich hab gerade angefangen, bin also blutiger beginner.

    das is der code...

    #include "stdafx.h"
    #include "iostream"
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	cout << "blabla";
    
    	getchar();
    	return(0);
    
    }
    

    das problem ist, dass sich das konsolenfenster sofort schliesst...

    "hallo welt.exe": "C:\Users\David\Documents\Visual Studio 2010\Projects\hallo welt\Debug\hallo welt.exe" geladen, Symbole wurden geladen.
    "hallo welt.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Symbole geladen (ohne Quellinformationen).
    "hallo welt.exe": "C:\Program Files\AVAST Software\Avast\snxhk.dll" geladen, Exporte wurden geladen.
    "hallo welt.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Symbole geladen (ohne Quellinformationen).
    "hallo welt.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Symbole geladen (ohne Quellinformationen).
    "hallo welt.exe": "C:\Windows\SysWOW64\apphelp.dll" geladen, Symbole geladen (ohne Quellinformationen).
    SHIMVIEW: ShimInfo(Complete)
    "hallo welt.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
    Das Programm "[6888] hallo welt.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
    

    vielleicht kann mir wer helfen



  • Dafür gibt es doch die Suchfunktion ...

    http://www.c-plusplus.net/forum/111042-full



  • danke, hätt ich machen sollen, stimmt!

    problem ist aber noch immer da obwohl ich das jetzt so gemacht habe... :S



  • Probiere doch zusätzlich zu #include stdio.h die Zeile #include stdiolib.h eingeben.

    Am Schluß des Programms gibst Du dann folgendes ein:

    system("Pause")
    return 0:

    Mit stdiolib (in dem die Funktion system (Pause) enthalten ist wird die Konsole angewiesen offenzubleiben. Du kannst sie dann nach Aufforderung per Tastendruck beenden..

    Wenn ich damit falsch liegen sollte - seht es mir nach, ich stehe auch erst am Anfang. Mit MS Visual C++ funktioniert das jedenfalls.

    Gruß Wolfgang


  • Mod

    Einfacher ist es den Debugger zu verwenden und einen Breakpoint auf dem return von main zu setzen.
    Oder mit Strg+F5 das Programm ohne Debugger zu starten. Dann hält die Konsole von selbst an.

    Dieser System Pause Quatsch und getchar ist nicht nötig.


  • Mod

    Einfacher ist es den Debugger zu verwenden und einen Breakpoint auf dem return von main zu setzen.
    Oder mit Strg+F5 das Programm ohne Debugger zu starten. Dann hält die Konsole von selbst an.

    Dieser System Pause Quatsch und getchar ist nicht nötig.



  • Versuche folgendes:

    1. Öffne Kommandozeile
    2. Finde Datei VSVARS32.BAT oder VCVARS32.BAT 1 in irgend einem "bin"-Verzeichnis
      von Deiner Visual Studio Version und rufe sie Auf (z. B. VCVARS32)
      HINT: Kopiere diese Batch-Datei in ein Verzeichnis, dass in Deinem
      Path vorkommt 😉
    3. Übersetze folgendes Programm (läuft bei mir einwandfrei) mit folgendem Befehl (direkt
      von der Kommandozeile aus:

    cl -EHsc programmname.cpp

    Wichtig: -EHsc muss exakt so eingegeben werden (Groß-/Kleinschreibung ist bei
    Optionen signifikant) und auch die Dateiendung ".cpp" muss angegeben werden.
    "CL ... programmname" funktioniert nicht (Suffix wird beim CL-Kommando nicht
    automatisch ergänzt, der Compiler unterscheidet an der Endung ob es C oder C++
    Code ist). Bei den Befehlen (z. B. "cl") ist die Schreibweise dagegen egal, es ginge auch Cl.

    //#include "stdafx.h" // diese Include-Datei kenne ich nicht,
                        // evtl. auch zwischen "<" ">" einschließen
      // N E I N : So wie jetzt (ohne obiges Include) wird das
      //           Programm bei mir einwandfrei compiliert (VS 2005)
      //           und korrekt ausgeführt
    // #include "iostream"  // FALSCH(!) - Richtig:
    #include <iostream> // Es ist eine Standard-Header Datei(!)
                        // Standard-Header-Dateien werden in "<...>"
                        // eingeschlossen. WARNUNG: < iostream > ist
                        // FALSCH (Leerzeichen sind bei den spitzen
                        // Klammern signifikant(!).
    using namespace std; 
    
    // Mag sein, das Microsoft das so möchte:
    // int _tmain(int argc, _TCHAR* argv[])
    // { // IMHO schlechter Stil, Stroustrup schreibt die öffnente Klammer
    //   // auf der selben Zeile, z. B. int main(int argc,char *argv[]) {
    //   //    ... sonst bekommt man einfach zu viele Zeilen.
    // ich würde folgendes verwenden:
        int main(int argc,char *argv[]) {
        // cout << "blabla";      // Hier würde ich:
        cout << "blabla" << endl; // verwenden, damit auch Newline geschrieben wird
        getchar(); // Wenn man es direkt von der Kommandozeile aus aufruft, kann man
                   // sich diese Zeile auch sparen - beim Debugger ist sie evtl. nützlich
        return(0);
    }
    

    1): Ganz wichtig: Evtl läuft es trotzdem nicht, siehe hierzu meinen anderen Beitrag.

    p.s.: Die Option -EHsc ist nicht unbedingt notwendig, aber ohne "hagelt" es
    jede Menge Warnungen.



  • Vielen Dank mit dem Tipp Strg+F5, habe das erst jetzt testen können.

    Gruß Wolfgang


Log in to reply