Fehler bei Char-Funktion
-
Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei ...
Das ist Visual Studio Standardeinstellung.
Kannst du bei Projekt/Einstellungen/C++/Vorkompilierte Header
deaktivieren durch setzen des entsprechenden Radio Buttons einstellen.
-
proggingmania schrieb:
Buchstaben werden quasi ingoriert und es wird weiter abgefragt.
Also quasi ist das ne Endlosschleife, bis eine Zahl von 0 bis 3 eingegeben wird.Des versteh ich schon. Aber ich schwöre bei Gott, ich hatte des mal so ähnlich, auch die Eingabe über integer und die Abfrage obs denn auch die Zahlen sind. Und als ich zum Beispiel a eingegeben hatte kam die Endlosschleife... warum ach immer.
Des irritiert mich jetzt n bissl. Aber trotzdem dankeKannst du bei Projekt/Einstellungen/C++/Vorkompilierte Header
deaktivieren durch setzen des entsprechenden Radio Buttons einstellen.Ähm... Bringt mir des einen Vorteil? Wenn der doch merkt dass ne header fehlt dann funzt des Prog doch eh net korrekt oder?
-
GlobalDeeJay schrieb:
Cool, des funktioniert sogar... daaaaaaaaanke...
Aber tust mir noch nen Gefallen und sagst mir warum des jetzt auf einmal geht?
*lieb frag*Tja, das frage ich mich auch gerade.
-
Tja, das frage ich mich auch gerade.
Hmm...Schau mal in die Zeile 9 deines letzten Codes... CStoll wird dich dafür hassen *gg*
Naja, aber wie heißt? Don't change a running System, dann lass ma des bei Code einfach auch so
Soll ja recht sein wenns funzt, wenn du rausfindest wieso wärs toll. Ich gebs auf. Zu viel Codes am Morgen :S
-
proggingmania schrieb:
GlobalDeeJay schrieb:
Cool, des funktioniert sogar... daaaaaaaaanke...
Aber tust mir noch nen Gefallen und sagst mir warum des jetzt auf einmal geht?
*lieb frag*Tja, das frage ich mich auch gerade.
bestimmts liegt's am 'fflush(stdin)' --> undefiniertes verhalten.
-
bestimmts liegt's am 'fflush(stdin)' --> undefiniertes verhalten.
Naja... abers funktioniert mit dem undefinierten Verhalten...
-
GlobalDeeJay schrieb:
bestimmts liegt's am 'fflush(stdin)' --> undefiniertes verhalten.
Naja... abers funktioniert mit dem undefinierten Verhalten...
ja, manchmal ....
-
Eeeeeendlich, jetzt hab ichs !
Es liegt an dieser Schleife:
while ((menue = getchar()) != EOF && menue != '\n');Ob menue nun int menue, oder unsigned int menue ist, völlig wumpe.
Die obige Schleife ist dann ne Endlosschleife, in der das Programm
munter nach einem EOF oder '\n' sucht, das es noch nicht gibt.Da ja vorher das Menü erscheint, merkt man nichts davon, weil ja das Programm richtig zu funktionieren scheint und auf eine Eingabe wartet.
Gibt man nun einen Wert ein, dann wird dieser in den Puffer übernommen und von der while Schleife verworfen.
Es bleibt dann nur ein '\n' in menue übrig.Man denkt nu, man hätte etwas korrekt eingegeben. Hat man auch, aber es ist nicht in der Variable menue gelandet, sondern im Nirvana des Ram.
Nachdem nun die while-Schleife zufrieden aus der Endlosschleife hüpft, da ja nun ein '\n' existiert, kommt es erst jetzt zur eigentlichen Eingabe.
Erst jetzt wird scanf aufgerufen.Das also war die Ursache des 'Hakens', das nur einmal passiert, nämlich beim Einritt in die Funktion
Mit fflush(stdin); gibt es dieses Problem nicht.
-
Benutze man: fgets(3), damit liest du die ganze Zeile ein und kannst bequem parsen, ohne stdin leeren zu müssen.
Außerdem: fflush(stdin) ist eine Microsoft Missgeburt oder egal auch immer, wer damit angefangen hat. fflush(stdin) ist Bullshit, weil stdin ein Eingabepuffer ist und fflush die Ausgabepuffer leert, somit ist fflush(stdin) auf richtige Betriebssysteme undefiniert.
-
supertux schrieb:
... weil stdin ein Eingabepuffer ist und fflush die Ausgabepuffer leert ...
Dazu mal ein Auszug aus der MSDN:
...
If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.
...Damit ist also auch der Eingabepuffer gemeint.
Bei Linux mag das anders sein.
-
Die obige Schleife ist dann ne Endlosschleife, in der das Programm
munter nach einem EOF oder '\n' sucht, das es noch nicht gibt.Da ja vorher das Menü erscheint, merkt man nichts davon, weil ja das Programm richtig zu funktionieren scheint und auf eine Eingabe wartet.
Tut mir leid, aber fürn Anfänger ist des bissl hart formuliert...
Kannst des auch fürn "dummy" erklären?
-
Zugegeben, ich habe mich da möglicherweise ziemlich umständlich ausgedrückt.
Also, beim Programmstart, wenn noch nichts eingegeben wurde, bleibt das Programm bei der while-Schleife hängen.
Dann gibts du etwas ein und drückst enter.
Das eingegebene wird in der while-Schleife verworfen und dann erst wird scanf aufgerufen.Wenn du mit einem Debugger da durchgehst dann merkst du das schon
So, ich geh mich jetzt in die Sonne legen.
Gruß,
p.