PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ // Keine Fehlermeldung, aber Programm nicht fehlerfrei



h4XX0r-7
26.10.2010, 21:31
Hallo, habe ein Problem mit einem Programm (C++).

Undzwar ist der Quellcode (soweit ich dies beurteilen kann) fehlerfrei, auch schon mehrfach überprüft (nicht nur von mir), aber das Programm springt an manchen Stellen einfach hin und her...:(


Sourcecode:
http://www.sourcepod.com/ocbirx30-3738





So, jetzt aber zu den Fehlern:

Nach der Eingabe von 0, Return, Eingabe des Dateinamen einer bereits vorhandenen Datei (written.txt), Return muss ich einen Satz eingeben.
Es ist aber egal welche Taste ich drücke, das Programm kehrt zurück zum Anfangsstatus und schreibt keinen einzigen Buchstaben in die Datei written.txt.

Ich vermute, dass beim Schreiben in die Datei, diese Datei nichtmal existieren muss und automatischerstellt wird...

Nach der Eingabe von 1, des Dateinamen einer bereits vorhandenen Datei (written.txt), Return, beginnt die Ausgabe des Programms in einer neuen Zeile, jedoch wird kein Inhalt angezeigt.
Nach erneutem Drücken von Return wird der kehrt das Programm zurück zum Anfangsstatus.

Die Datei written.txt enthält:

as
sas
asas

Ich hoffe ihr könnt mir helfen,

MfG
h4XX0r7

inout
26.10.2010, 22:09
Ohne mir das jetzt genauer angesehen zu haben, denke ich, dass der Fehler wohl wieder an einem fehlenden flush liegt (andere Threads diesbezüglich gab es hier auch schon in den letzten Tagen).
Zudem brauchst du hier kein float, du kannst mit cin.fail() oder (!(cin>>x)) prüfen, ob die Eingabe ok war.
strings und chars solltest du auch nicht mischen, es gibt .c_str().
Sind noch ein paar andere unschöne Dinge drin, aber ich denke damit sollte es erstmal laufen.

EBFE
26.10.2010, 22:11
getline:
getline - C++ Reference (http://www.cplusplus.com/reference/string/getline/)

he delimiter character is delim for the first function version, and '\n' (newline character) for the second. The extraction also stops if the end of file is reached in is or if some other error occurs during the input operation.

If the delimiter is found, it is extracted and discarded, i.e. it is not stored and the next input operation will begin after iCIN >> darfst du gerne selber nachschlagen, was es ist ;). Als Tipp:
Using cin to get user input. - C++ Forums (http://www.cplusplus.com/forum/articles/6046/)

Cin is notorious at causing input issues because it doesn't remove the newline character from the stream or do type-checking. So anyone using cin >> var; and following it up with another cin >> stringtype; or getline(); will receive empty inputs. It's best practice to NOT MIX the different types of input methods from cin.
D.h die eine Eingabeform belässt "\n" im Puffer, die andere ließt es dagegen ein und nutzt es zudem als "Trennzeichen".

Und die Moral von der Geschicht': mische beide Eingabeformen nicht (alternativ: verwende eine anständig designte Sprache mit zeitgemäßen Libs *duck & run :p* )

Bismarck_1
27.10.2010, 11:45
Nach dem "cin" ein "cin.ignore()". Dann müsste es gehen:


cin >> dateinamewrite;
cin.ignore();ignore - C++ Reference (http://www.cplusplus.com/reference/iostream/istream/ignore/)