Das Ausgabefenster der .EXE einer kompilierten C-Datei blinkt nur kurz auf



  • Hihi,

    deine Funktion musst du natürlich auch aufrufen.



  • Es ist mir zwar unangenehm, aber ich weis nicht was du meinst ^^



  • FireFlow schrieb:

    Du kannst es auch ausm Command Prompt starten...

    Meinst du aus dem Compiler direkt starten ?

    Was muss ich dort eingeben ?

    (denn 2.exe funktioniert nicht, so hatte ich das Programm gennant, vorweg: es gibt diese Datei und sie funktioniert auch, nur das Fenster bleibt nicht stabil)



  • printf("%d\n",k);
      wait();
      return 0;
    }
    


  • @greymiller mach folgendes

    printf("%d\n",k);
    getch();
    return 0;
    }
    

    Die beiden anderen Funktionen in deinem Wait kann ich nicht beurteilen, halte sie aber für nicht notwendig. Du kannst aber anstelle von getch() den Funktionsaufruf deiner Funktion dort eintragen.

    Die altenative dazu ist eine Konsolenfesnter zu öffnen und das Programm darin zu starten.

    Das sollte ausreichen, es ist auch der zentrale inhalt des Verweises auf den anderen thread. Der Verweis kommt deswegen weil im Schnitt 1* pro Woche genau diese Frage kommt.

    👍 Und zur Information. Dieselbe Frage in mehren Boards in diesem Forum zu stellen führt nach dem ersten Mal immer zu einem sehr deutlichen Anschiß.



  • 1. So sieht mein Programm jetzt aus und es funktioniert.
    Das Fenster bleibt stabil und -2 steht als Ergenis darin.

    #include <stdio.h>

    void wait ()
    {
    setvbuf(stdin,NULL,_IONBF,0);
    setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
    getchar();
    }

    main()
    {

    int i;
    int j;
    int k;

    i = 1;
    j=2;
    k =i+j-5;

    printf("%d\n",k);
    wait();
    return 0;
    }

    --> Ich habe natürlich auch noch keine Ahnung, ob nicht die inee oder andere Zeile überflüssig ist. Sollte dies der Fall sein, dann postet einfach die Light-Version.

    2. Sorry für Doppelpost, es musste aber so schnell wie möglich beantwortet werden und es ist leider nicht ersichtlich, wer in diesem Forum (und ob überhaupt jemand) online ist.

    Deshalb habe ich die Fragen in 2 passenden Bereichen gleichzeitg gestellt.

    #include <conio.h>
    #include <windows.h>

    void wait ()
    {
    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
    getch();
    }

    Das eingebunden funktioniert nicht, da die Header Datei nicht gefunden werden kann (conio.h), ich weis auch nicht aus welcher Bibliothek ich die aufrufen soll, oder ob ich die vorher selber schreiben soll ?



  • Die Lösung

    #include <stdio.h>
    void wait () {
       setvbuf(stdin,NULL,_IONBF,0);
       setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
       getchar();
    }
    

    ist die einzige portable Lösung die nur mit standard headern auskommt.
    Trotzdem möchte ich an dieser Stelle noch einmal darauf hinweisen dass ein Kommandozeilenprogramm von der Kommandozeile gestartet werden sollte und dann ist dein "Problem" auf einmal gar kein Problem.
    Kurt



  • greymiller schrieb:

    FireFlow schrieb:

    Du kannst es auch ausm Command Prompt starten...

    Meinst du aus dem Compiler direkt starten ?

    Was muss ich dort eingeben ?

    (denn 2.exe funktioniert nicht, so hatte ich das Programm gennant, vorweg: es gibt diese Datei und sie funktioniert auch, nur das Fenster bleibt nicht stabil)

    Hihi, Windowsler... Naja wir ham ja alle mal angefangen.

    Was er meint:

    1. Klicke auf Start -> Ausführen
    2. Geb da "cmd" ein un drücke Enter.
    3. Gib in das Fenster, was da erscheint "cd <pfad zur exe>" ein und bestätige mit Enter
    4. Gib den Name der .exe ein und drücke Enter

    Edit:

    Versuchs mal alternativ mit folgendem Code:

    #include <stdio.h>
    
    int main( int argc, char* argv[] ) {
       printf( "Hallo Welt!\n" );
       system( "pause" );
    
       return 0;
    }
    


  • Das war dann auch noch die letzte gesuchte richtige Antwort.

    Jetzt habe ich sogar beide Probleme beantwortet bekommen.

    Testurteil: Sehr gut 😃

    EDIT zum EDIT:

    #include <stdio.h>

    int main( int argc, char* argv[] ) {
    printf( "Hallo Welt!\n" );
    system( "pause" );

    return 0;
    }

    Und was bedeutet argc ? argv[] ? und system () ?

    Ich weis das die ersten beiden Parameter sind und das system() kann ich aber nicht zuordnen, da aber nirgends auftauchen und dadurch in meinen Augen überflüssig erscheinen 😮

    Denn am einfachsten wäre es doch

    #include <stdio.h>

    main()
    {
    printf( "Hallo Welt!\n" );
    return 0;
    }

    wenn ich das ganze dann aus dem Kommandozeilen Modus starte.



  • greymiller schrieb:

    Und was bedeutet argc ? argv[] ? und system () ?

    Ich weis das die ersten beiden Parameter sind und das system() kann ich aber nicht zuordnen, da aber nirgends auftauchen und dadurch in meinen Augen überflüssig erscheinen 😮

    Das "argc" und das "argv" kannst du getrost weglassen und ignorieren. Damit wirst du unter Windows warscheinlich nich mit in berührung kommen. Das sind Parameter, die du über die Komandozeile dem Programm übergeben kannst.

    "system" ruft ein anderes Programm, oder einen Systembefehl auf. Hier den Befehl "pause".



  • #include <stdio.h>

    main()
    {
    printf( "Hallo Welt!\n" );
    return 0;
    }

    Ich habe es so probiert, es funktioniert auch ohne system ("pause")



  • Habs ja schon gesagt dass dein Problem gar kein Problem ist. 😉
    Kurt



  • Ihr sollte dann vieleicht den Hinweis in der FAQ ändern und/oder die hier beschriebenen Möglichkeiten mit aufnehmen/ergänzen.

    Denn wenn ich in jedes Programm den vom Forum gegebenen Ratschlag mit einprogrammieren muss, ist das mehr schlecht als recht.

    Ich habe natürlich keine Ahnung ob es nur in meinem Falle so einfach geht und nicht doch in den meisten Fällen mit eingearbeitet werden muss.

    Danke an alle.



  • -> system("pause") ist schlecht, schlecht, schlecht
    -> PAD hat dich angeschwindelt, die ersten beiden Zeilen sind nötig
    -> Kommandozeilenprogramme starte ich meistens nicht aus der Kommandozeile, und wenn mein Programm nur funktioniert wenn das der Fall ist...?

    Also die FAQ-Lösung ist schon korrekt und wurde 100 mal ausdiskutiert. Warum jedes Mal wieder 2 Seiten Diskussion mit verschiedenen unnötigen und weniger guten Vorschlägen kommen ist mir ein Rätsel 🙄

    MfG SideWinder



  • @Sidewinder, danke für die Korrektur. Ich hatte bisher keine Probleme damit, da ich entweder das Programm im Debugger ausführe,der behält das Fenster am Ende offen, oder es zum Test in einem Consolenfenster mit großem Scrollbuffer starte.

    Es gibt auch unter Windows eine Menge Programme denen auf der Kommandozeile parameter übergeben werden, sogar von Microsoft.

    Deswegen ist das "int main( int argc, char argv[]*" mit den Übergabeparametern sinnvoll, genauso wie der Prototyp int Sinn macht, damit kann man nähmlich dem aufrufenden Prozess den Erfolg/Misserfolg mitteilen.



  • Hi,
    Wieso ist

    #include <process.h>
    void main()
    {
    system("PAUSE");
    }
    

    eine schlechte Variante? Da ich das ab und an mal verwende, moechte ich gerne wissen, wieso das eine schlechte Variatnte ist *g*
    Danke im Vorraus!



  • im faq (glaub ansi, rund um oder c++) steht was zu system ;), zu void main braucht man wohl nix sagen 🤡



  • // EDIT: gabs schon, übersehen


Anmelden zum Antworten