printf - Ausgabefenster verschwindet sofort!



  • Danke für die schnellen Antworten!
    Ich merke gerade, dass Pelles C für Windows auch ne ganz einfache Funktion hat, direkt den Kram ins cmd Fenster zu schubsen.
    Kann ich mir den Umweg darüber also sparen.

    Sry wegen der FAQ, hab hier zuerst nicht ganz durchgeblickt.

    Eine Frage hab ich noch, hab auch die Suchefunktion genutzt.

    Ich will folgenden Code kompilieren:

    #include <stdio.h>

    int Main ()

    {

    printf("3 + 2 * 8 = %i\n", 3 + 2 * 8);

    printf("(3 + 2) * 8 = %i\n", (3 + 2) * 8);

    return 0;

    }

    Bekomme dann folgende Meldung:

    Erzeugen von 1.obj.
    D:\1.c(5): warning #2027: Missing prototype for 'Main'.
    Fertig.

    Und wenn ich ne .exe erzeugen will kommt das:

    Erzeugen von 123.exe.
    POLINK: error: Unresolved external symbol '_main'.
    POLINK: fatal error: 1 unresolved external(s).
    *** Fehlercode: 1 ***
    Fertig.

    Linker ist auf Console gestellt.
    Stelle ich ihn auf Windows, kommt beim compilen die gleiche Meldung, beim exe erzeugen dann allerdings:

    Erzeugen von 123.exe.
    POLINK: error: Unresolved external symbol '_WinMain@16'.
    POLINK: fatal error: 1 unresolved external(s).
    *** Fehlercode: 1 ***
    Fertig.

    Windows CE bringt dagegen die gleichen Meldungen wie bei Console.

    Native bringt wieder beim compilen das übliche, beim exe erzeugen dagegen:

    Erzeugen von 123.exe.
    POLINK: error: Unresolved external symbol '_DriverEntry@8'.
    POLINK: fatal error: 1 unresolved external(s).
    *** Fehlercode: 1 ***
    Fertig.

    Kann mir jemand weiterhelfen?



  • Die Funktion heißt main, nicht Main. C und C++ sind case-sensitiv! Wundere dich also demnächst nicht, wenn der Compiler PrintF nicht finden kann. 😉



  • Sorry für die späte Antwort, hatte zu tun.

    Ja, das war ein Flüchtigkeitsfehler von mir. Danke für den Hinweis, danach funktionierte es auch!



  • Du kannst auch schreiben:

    int main()
    {
        printf("Hallo Welt!");
        getchar();
        return 0;
    }
    

    Dann schließt sich die Konsole erst nach einem Tastendruck.

    MfG Chris_



  • system("pause");
    

    funktioniert auch prima. heißt zwar immer, daß system nicht so schön ist, aber zum üben interessiert das doch nicht.



  • Chris_ schrieb:

    Du kannst auch schreiben:

    int main()
    {
        printf("Hallo Welt!");
        getchar();
        return 0;
    }
    

    Dann schließt sich die Konsole erst nach einem Tastendruck.

    MfG Chris_

    Das funktioniert nur solange, bis man irgendwelche Eingabefunktionen verwendet und dann beim getchar noch irgendwas im Eingabepuffer liegt. Dann wundert man sich plötzlich, dass getchar kaputt ist... 😉



  • _matze schrieb:

    Das funktioniert nur solange, bis man irgendwelche Eingabefunktionen verwendet und dann beim getchar noch irgendwas im Eingabepuffer liegt.
    Dann wundert man sich plötzlich, dass getchar kaputt ist... 😉

    Ja, aber man kann doch vor dem getchar()-Aufruf den Eingabepuffer leeren, oder?



  • Chris_ schrieb:

    _matze schrieb:

    Das funktioniert nur solange, bis man irgendwelche Eingabefunktionen verwendet und dann beim getchar noch irgendwas im Eingabepuffer liegt.
    Dann wundert man sich plötzlich, dass getchar kaputt ist... 😉

    Ja, aber man kann doch vor dem getchar()-Aufruf den Eingabepuffer leeren, oder?

    Ja sicher, aber dann solltest du das in deinem Beispiel auch direkt machen, damit er nicht in diese Falle stolpert. Er übernimmt das getchar und geht erst mal davon aus, dass er eine funktionierende Methode gefunden hat, um das Schließen der Konsole zu verhindern. Wieso sollte er annehmen, dass diese nicht unter allen Umständen funktioniert? Mit ein wenig Glück sucht er die Ursache für dasx plötzlich auftretende, direkte Schließen der Konsole überall, nur nicht beim getchar. 😉



  • Ok, hatte ich nicht drangedacht :p
    Also hier noch einmal mit geleertem Eingabepuffer:

    int main()
    {
        printf("Hallo Welt!");
        fflush(stdin);
        getchar();
        return 0;
    }
    

    Quelle: http://msdn.microsoft.com/en-us/library/9yky46tz%28VS.71%29.aspx

    Ich hoffe das passt jetzt so 😃

    MfG Chris_



  • Leider wieder verloren! :p 😉

    Das passt zwar für den MS-Compiler, ist aber nicht im Standard definiert, daher sollte man vielleicht lieber zu allgemeingültigen Methoden greifen, die beim nächsten Compiler keine Schwierigkeiten machen. Zu dem Thema gibt es gerade einen aktuellen Thread:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-273534-and-highlight-is-.html



  • Ok, ich geb mich geschlagen 😉



  • Dazu will ich noch ergänzend sagen, dass fflush(stdin) ja nicht von Grund auf böse ist. Wenn ich kleine Testprogrämmchen mache, nutze ich es auch manchmal. Es hängt aber vom Compiler ab, ob dies erlaubt ist. Da ich ausschließlich den MS-Compiler nutze, darf ich auch stdin fflushen. Nur sollte man diese Methode nicht hier im Forum als Lösung für das Problem posten, zumal der Threadersteller ja bereits gesagt hat, dass er einen anderen Compiler benutzt. Trotzdem kannst du (genau wie ich) im Visual Studio natürlich gerne fflushen, was das Zeug hält, solange du die nicht vorhandene Portabilität im Auge behältst. 😉


Anmelden zum Antworten