Anfängerfrage: Beim Debuggen flackerts nur, wieso??
-
Guten Tag,
Ich habe mich nun einmal in die Welt des C++ hineinbegeben wollen und mir das Buch "C++ lernen und professionell anwenden" geholt. Nun wird als erste Aufgabe ein (winzig) kleines Programm vorgegeben, nämlich will man die Meldung "Viel Spaß mit C++!" erhalten. Genau erklärt wie das geht steht da nicht, nur die Befehle den man eingeben soll, nicht wie man ein neues Programm in dem Compiler (bei mir: Microsoft Visual C++ 2010 Express) erstellt . Daher hab ich mich mal an diese Einleitung gehalten: http://www.cpp-tutor.de/cpp/le01/ide.htmlwenn ich nun folgenden Text eingegeben habe:
// heyho.cpp starten #include <iostream> using namespace std; int main() { cout << "Viel Spaß mit C++!" << endl; return 0; }Auf "heyho erstellen" im Menü geklickt habe (heyho is der dateiname), kommt zunächst die Meldung:
1>------ Erstellen gestartet: Projekt: Heyho, Konfiguration: Debug Win32 ------
1> heyho.cpp
1> LINK : c:\dokumente und einstellungen\\eigene dateien\visual studio 2010\Projects\Heyho\Debug\Heyho.exe wurde nicht gefunden oder beim letzten inkrementellen Linkvorgang nicht erstellt; vollständiger Link wird durchgeführt.
1> Heyho.vcxproj -> c:\dokumente und einstellungen\\eigene dateien\visual studio 2010\Projects\Heyho\Debug\Heyho.exe
========== Erstellen: 1 erfolgreich, Fehler bei 0, 0 aktuell, 0 übersprungen ==========Klicke ich nun auf "Debugging starten" oder "starten ohne Debugging" kommt nur kurz das schwarze Befehlsfenster und verschwindet direkt wieder.
Muss ich da noch mehr machen ( irgendwas mit nem Linker, ne .exe oder .bat ausführen)? Da das ganze für Visual C++ 2010 gedacht ist denke ich mal kaum das der Befehl mit dem "return 0;" nicht ausreichen könnte, ist schließlich eins der bekanntesten C++ Bücher.Ich denke mal die Lösung dürfte nicht sehr kompliziert sein, aber dennoch finde ich sie einfach nicht (gewisser Guide der mir aber noch schwierigkeiten und wenig Hoffnung bereitet http://www.c-plusplus.net/forum/111042 ).
Daher vielen Dank für jeden Lösungsansatz

Mit vielen Grüßen Someone01
-
Hallo Someone01, das liegt ganz einfach daran, dass der Compiler den Code durch geht und damit auch fertig ist. Du musst ihm sagen, dass er danach noch auf etwas warten soll, auf eine Eingabe zum Beispiel.
Also einfach vor 'return 0' ein "cin.get();" schreiben.
Hier kannst du natürlich auch alternativen, wie 'system ("PAUSE")' anwenden.
Übrigens dafür hättest du in Google auch eine Lösung in weniger als 2 Minuten gefunden
!Mfg, viel Spaß und Erfolg!
-
Wie du das Schliessen der Konsole verhindern kannst ist hier nachzulesen: Automatisches Schliessen der Konsole verhindern.
-
Fabolous12 schrieb:
das liegt ganz einfach daran, dass der Compiler den Code durch geht und damit auch fertig ist. Du musst ihm sagen, dass er danach noch auf etwas warten soll, auf eine Eingabe zum Beispiel.
Also einfach vor 'return 0' ein "cin.get();" schreiben.
Danke! Doch wieso wird das im Buch nicht benutzt? Anders gefragt, was meint cin.get(); ?
-
Someone01 schrieb:
Doch wieso wird das im Buch nicht benutzt? Anders gefragt, was meint cin.get(); ?
Mit cin.get() wird gewartet, bis du das naechste Zeichen eingibst und dieses Zeichen wird eingelesen. Das haettest du aber ganz leicht selber mit Google herausgefunden

Welches Buch liest du denn?
-
Um ehrlich zu sein, ich hatte genau das selbe Problem wie du, als ich vor zwei Wochen wieder angefangen habe C++ mit meinem Buch zu lernen und ich kann es bis heute nicht nachvollziehen, warum die Autoren kein Wort darüber verlieren.
'cin.get();' Wartet einfach nur auf eine Eingabe. Wenn du also eine beliebige Taste drückst wird sich das Programm schließen. Mit diesem Befehl wirst du dich früher oder später noch im Buch auseinander setzen, da bin ich mir ziemlich sicher.

Edit: Sorry für den doppel Post - ich war zu langsam
-
Someone01 schrieb:
Fabolous12 schrieb:
das liegt ganz einfach daran, dass der Compiler den Code durch geht und damit auch fertig ist. Du musst ihm sagen, dass er danach noch auf etwas warten soll, auf eine Eingabe zum Beispiel.
Also einfach vor 'return 0' ein "cin.get();" schreiben.
Danke! Doch wieso wird das im Buch nicht benutzt? Anders gefragt, was meint cin.get(); ?
cin.get() wartet solange, bis du Enter drückst. Naja, wieso das nicht im Buch steht...
1. Man kann nicht davon ausgehen, dass jeder das Programm so erstellt wie du. Z.B. kannst du das Programm über die cmd starten. Dann siehst du die Ausgabe ja in der Konsole.
2. Du kannst das Projekt auch so einstellen (weiß grad nicht wie) dass automatisch gewartet wird, wenn du es von Visual Studio aus startest.==> Was ich sagen will, jeder startet ein Programm anders. Manche brauchen die Hilfe von cin.get(), manche nicht. Dass kann der Buchautor ja nicht riechen, wer was macht.
-
Da fällt mir gerade noch ein Argument ein, wieso es nicht im Buch am Ende der main stehen sollte. Das blöde ist nämlich auch, wenn im Stream bereits ein Zeichen drinsteht. Dann wird nicht auf eine Benutzereingabe gewartet, was doof ist. Nun kannst du hergehen, und vorher alle Zeichen des Streams verwerfen, sodass 100% auf eine Benutzereingabe gewartet wird. Das wiederum ist aber doof, wenn keine Zeichen im Stream stehen, sodass du dann 2x Enter drücken musst. Auch doof, was?
Es gibt einfach keine perfekte Lösung in Verbindung mit cin.
-
out schrieb:
Da fällt mir gerade noch ein Argument ein, wieso es nicht im Buch am Ende der main stehen sollte. Das blöde ist nämlich auch, wenn im Stream bereits ein Zeichen drinsteht. Dann wird nicht auf eine Benutzereingabe gewartet, was doof ist. Nun kannst du hergehen, und vorher alle Zeichen des Streams verwerfen, sodass 100% auf eine Benutzereingabe gewartet wird. Das wiederum ist aber doof, wenn keine Zeichen im Stream stehen, sodass du dann 2x Enter drücken musst. Auch doof, was?
Es gibt einfach keine perfekte Lösung in Verbindung mit cin.Schau dir einmal den Beitrag an, den ich oben verlinkt habe

-
icarus2 schrieb:
out schrieb:
Da fällt mir gerade noch ein Argument ein, wieso es nicht im Buch am Ende der main stehen sollte. Das blöde ist nämlich auch, wenn im Stream bereits ein Zeichen drinsteht. Dann wird nicht auf eine Benutzereingabe gewartet, was doof ist. Nun kannst du hergehen, und vorher alle Zeichen des Streams verwerfen, sodass 100% auf eine Benutzereingabe gewartet wird. Das wiederum ist aber doof, wenn keine Zeichen im Stream stehen, sodass du dann 2x Enter drücken musst. Auch doof, was?
Es gibt einfach keine perfekte Lösung in Verbindung mit cin.Schau dir einmal den Beitrag an, den ich oben verlinkt habe

Was meinst du? Ja, da steht das schon mit
ignore. Da steht aber nicht, dass man eventuell 2x Enter drücken muss.
-
out schrieb:
Was meinst du? Ja, da steht das schon mit
ignore. Da steht aber nicht, dass man eventuell 2x Enter drücken muss.Ich habe Visual Studio schon lange nicht mehr gebraucht... warum muss man unter gewissen Umstaenden zwei mal Enter druecken?
-
icarus2 schrieb:
out schrieb:
Was meinst du? Ja, da steht das schon mit
ignore. Da steht aber nicht, dass man eventuell 2x Enter drücken muss.Ich habe Visual Studio schon lange nicht mehr gebraucht... warum muss man unter gewissen Umstaenden zwei mal Enter druecken?
Das hat nichts mit dem Compiler zu tun. Das will der C++ Standard so. :p
std::istream::ignore schrieb:
Extracts characters from the input sequence and discards them, until either n characters have been extracted, or one compares equal to delim.
#include <iostream> #include <limits> using namespace std; int main() { cout << "Bitte 2x Enter druecken :P"; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); }
-
out schrieb:
Das hat nichts mit dem Compiler zu tun. Das will der C++ Standard so. :p
