Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben (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 von pokerface
Geschrieben

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?

Geschrieben
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.

Geschrieben

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.

Geschrieben
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.

Geschrieben

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]

Geschrieben

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.

Geschrieben
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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...