pokerface Geschrieben 22. August 2009 Geschrieben 22. August 2009 Guten Tag, ich hoffe ich befinde mich hier im richtigen Unterforum. Ich habe heute ein C-Tutorial gestarten und im Zuge dessen die Entwicklungsumgebung CodeBlocks installiert. Es funktionierte auch alles soweit einwandfrei, nur leider lassen sich die erstellten exe-Dateien nicht außerhalb des Programms öffnen, sprich nur über Build->Run. Wenn ich die Datei, in meinem Fall mit folgendem Quellcode, #include <stdio.h> int main() { printf ("hello, world!"); return 0; } versuche über das Verzeichnis per Doppelklick zu öffnen, erscheint die Konsole nur für den Bruchteil einer Sekunde und schließt sich quasi sofort wieder. Woran liegt das? Das gleiche Problem habe ich auch mit allen anderen Quellcodes, die bisher in dem Tutorial zum Einsatz kamen. Ich hoffe dieses Problem hängt nicht mit meinem Computer zusammen, denn dann bin ich in diesem Forum wohl komplett falsch. Zitieren
robotto7831a Geschrieben 22. August 2009 Geschrieben 22. August 2009 Hallo, das ist ganz normal. Da Du in deinem Quellcode keine "Pausen" eingebaut hast, läuft das Programm von oben nach unten durch und nach Programmende schließt sich die Dos Box wieder. Start das Programm mal aus der Dos Box heraus. Frank Zitieren
pokerface Geschrieben 22. August 2009 Autor Geschrieben 22. August 2009 (bearbeitet) Vielen Dank! Über Start->Ausführen->cmd hatte es zwar nicht funktioniert (Das meintest du doch, oder?), allerdings funktioniert es, wenn man die Funktion scanf(), wie du sagtest, als "Pause einbaut". Vielen Dank für diesen Tipp. Eigentlich ist es ja auch logisch, aber nunja, aller Anfang ist schwer. Bearbeitet 22. August 2009 von pokerface Zitieren
robotto7831a Geschrieben 22. August 2009 Geschrieben 22. August 2009 Naja scanf kann man zwar verwenden ist aber nicht so optimal. C/C++ Forum :: Automatisches Schließen verhindern Frank Zitieren
chooter696 Geschrieben 23. August 2009 Geschrieben 23. August 2009 ist zwar richtig was mein vorposter geschrieben hat. Aber zum testen benutze ich am ende immer ein system("pause"); (natürlich nur unter windo of ) Da dieser Befehl schnell zu schreiben ist finde ich ihn für den Anfang zwar nicht Optimal aber ausreichend. Habe ihn damals auch benutzt und geschadet hats net. Wenn ich fragen darf, wieso macht jeder am Ende der Application ein return 0; ? Ist doch völlig überflüssig. Und gerade am anfang sollten die Anwendungen doch eher so Informativ und klein wie möglich sein und nicht solche Zeilen beinhalten die nicht nötig sind. Aber vielleicht kann mich ja einer aufklären warum die autoren dies tuhen? Zitieren
Klotzkopp Geschrieben 23. August 2009 Geschrieben 23. August 2009 Ist doch völlig überflüssig. Und gerade am anfang sollten die Anwendungen doch eher so Informativ und klein wie möglich sein und nicht solche Zeilen beinhalten die nicht nötig sind.Und dann befürwortest du system("pause")? Eine unportable Funktion mit potentiellem Sicherheitsrisiko, die eigens einen weiteren Prozess startet, nur damit sich der eigene nicht automatisch beendet? Spätestens wenn main etwas anderes als 0 zurückgeben soll, braucht man die return-Anweisung. Und sie schadet nicht. Man kann sie bei main weglassen, man muss nicht. Zitieren
chooter696 Geschrieben 23. August 2009 Geschrieben 23. August 2009 ja gerade weil man sie weg lassen kann finde ich sollte sie nicht aufgehührt werden. Und wieso nicht system(pause) unter windows? Wenn man nicht will kann mans auch einfach über konsole machen da sieht man alles. Zitieren
pokerface Geschrieben 23. August 2009 Autor Geschrieben 23. August 2009 Naja scanf kann man zwar verwenden ist aber nicht so optimal. C/C++ Forum :: Automatisches Schließen verhindern Frank Dankeschön, habe es jetzt so gelöst: #include <stdio.h> int main() { int summand1, summand2; printf ("Additionsaufgabe eingeben: "); scanf ("%d + %d", &summand1, &summand2); printf("= %d\n\n", summand1 + summand2); fflush(stdin); getchar(); } Ich denke für's Erste ist das in Ordnung so. Danke für eure Beiträge. Zitieren
Klotzkopp Geschrieben 23. August 2009 Geschrieben 23. August 2009 fflush(stdin); Da hast du dir aber eine der schlechteren Lösungen herausgesucht. Das Verhalten von fflush auf Eingabeströmen ist nicht definiert. Das funktioniert soweit ich weiß nur bei den Microsoft-Compilern. Ich verstehe das Bedürfnis, das Schließen eines Konsolenprogramms verhindern zu wollen. Mir ist aber noch nie ein ernsthaftes Konsolenprogramm begegnet, das am Ende noch einen Tastendruck erwartet. Das wäre auch ziemlich schlecht, weil man dann so ein Programm kaum durch Umleiten einer Ausgabe steuern könnte. Aber wenn man es denn dann macht, und auch noch den guten Hinweis von robotto7831a bekommt, dann sollte man doch eine der dort vorgestellten Lösungen benutzen. Also bitte: #include <stdio.h> void wait () { setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); getchar(); } int main() { int summand1, summand2; printf ("Additionsaufgabe eingeben: "); scanf ("%d + %d", &summand1, &summand2); printf("= %d\n\n", summand1 + summand2); wait(); }[/code] Zitieren
Klotzkopp Geschrieben 23. August 2009 Geschrieben 23. August 2009 Und wieso nicht system(pause) unter windows? Hab ich doch schon geschrieben:Nicht portabelTotaler OverkillSicherheitsrisiko Zitieren
pokerface Geschrieben 23. August 2009 Autor Geschrieben 23. August 2009 Aber wenn man es denn dann macht, und auch noch den guten Hinweis von robotto7831a bekommt, dann sollte man doch eine der dort vorgestellten Lösungen benutzen. Alles klar. fflush war einfach die Methode um den Eingabepuffer zu lehren, die mir bereits bekannt war. Ich sah keinen Grund eine der dort angegebenen zu übernehmen. Danke für die Info, dass es doch einen gibt. Zitieren
Wuwu Geschrieben 27. August 2009 Geschrieben 27. August 2009 ja gerade weil man sie weg lassen kann finde ich sollte sie nicht aufgehührt werden. Und wieso nicht system(pause) unter windows? Wenn man nicht will kann mans auch einfach über konsole machen da sieht man alles. um konsistenz zu wahren? int main hat nunmal einen rückgabewert, also gibt man auch bitte einen integer zurück, nichts ist schlimmer als anfänger durch inkonsistenz zu verwirren Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.