Das Ausgabefenster der .EXE einer kompilierten C-Datei blinkt nur kurz auf
-
Also möchte gerade beginnen mich mit C zu befassen.
Habe auch einen Compiler und einen Texteditor.
Das kompilieren und das texten funktioniert auch tadellos (bis jetzt), aber wenn ich die .EXE Datei (ich arbeite auf einer XP Oberfläche) öffnen möchte und dieses DOS ähnliche Fenster erblicken will, blinkt dies nur kurz auf.
Durch mehrmalliges klicken auf die .EXE Datei kann ich erkennen, das das richtige Ergebnis ausgegeben wird.
Als Beispiel ein ganz einfaches Prog:
#include <stdio.h>
main()
{int i;
int j;
int k;i=1;
j=2;
k=i+j-5;printf("%d\n",k);
return 0;
}"-2" wird auch ausgegeben, dass konnte ich erkennen, aber das Fenster bleibt wie gesagt nicht offen, sondern schliest sich sofort wieder.
Was muss ich tun
-
FAQ http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
(juhu, durfte das auch mal sagen
)
-
-
Das heist für mich, ich muss das in jedes C-Programm mit einbinden ?
void wait ()
{
setvbuf(stdin,NULL,_IONBF,0);
setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
getchar();
}
-
Du kannst es auch ausm Command Prompt starten...
-
Hab es versucht einzubinden, es funktioniert immer mnoch nicht.
Ich muss noch einmal anmerken, dass ich noch keine Ahnung habe.
So sieht das Programm jetzt aus:
#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);
return 0;
}Vieleicht kann mal jemand posten, wie das genau eingebunden wird.
FireFlow schrieb:
Du kannst es auch ausm Command Prompt starten...
Ich habe keine Ahnung was du meinst ???
Beschreibe es genau, bitte.
-
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:
- Klicke auf Start -> Ausführen
- Geb da "cmd" ein un drücke Enter.
- Gib in das Fenster, was da erscheint "cd <pfad zur exe>" ein und bestätige mit Enter
- 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