Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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

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?

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.

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.

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.

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]

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.