ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
596
596
EMPFEHLEN
-
Hallo!
Ich hab ein merkwürdiges Problem und kann mir nicht erklären woran es liegt. Folgendes simples Progamm:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
#include <iostream> #include <string> #include <cctype> using namespace std; int menu(); int main() { int test = 0; while(test != 'B') { test = menu(); } return 0; } int menu() { static char menuStr[] = "\n\n B = Beenden des Programms" "\n\n Ihre Wahl: "; cout << menuStr; char wahl; cin.sync(); cin.clear(); // Nur neue Eingabe if( !cin.get(wahl)) wahl = 'B'; else wahl = toupper(wahl); cin.sync(); // Eingabepuffer löschen return wahl; }
Mein Problem ist nun wenn ich es mit g++ kompiliere und starte reagiert die Eingabe ganz komisch. Wenn ich exemplarisch den Wert 'a' eingebe wird die Schleife nicht einmal durchgegangen wie erwartet, sondern es wird sofort ein zweites Mal mit einem Leerwert durchgegangen (siehe Anhang). Die Schleife geht also immer einmal mehr als gewollt mit irgendwelchen Werten durch als würde noch etwas im istream hängen. Wenn ich dieses Programm unter Visual Studios starte funktioniert alles wie gewollt. Ich würde allerdings gerne mit Netbeans und dem g++ Compiler entwickeln und hoffe daher das mir jemand dieses Verhalten erklären kann und mich aufklärt was ich falsch mache
Ich danke im Voraus!
lg
-
04.10.10 09:37 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Welche Version von g++ hast du denn? (g++ --version) MinGW oder Cygwin?
Mit der 4.5.0 MinGW und der 4.3.0 MinGW Version hab ich hier keine Probleme und dein Programm funktioniert.
Mit dem Cygwin g++ 4.3.4 gibt es das von dir beschriebene Problem.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hi!
Danke für die Antwort! Genau es handelt sich um den cygwin 4.3.4 Compiler. Weißt du an was das liegen könnte oder sollte ich einfach zum MinGW wechseln?
lg
-
05.10.10 08:51 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Vermutlich liegt es an der zugrundeliegenden Implementierung der Ein/Ausgabeströme die unter Cygwin mit Pipes realisiert ist.
Wenn du nicht wirklich Cygwin als UNIX-Kompatibilitätsschicht benötigst, dann wechsle doch einfach zu MinGW.
Du könntest statt sync() auch ignore() verwenden um den Rest einer eingegebenen Zeile zu ignorieren:
Oder du liest immer eine komplette Zeile ein und verarbeitest diese.Code cpp:1 2 3
inline ::std::istream& ignore_line(::std::istream& in) { return in.ignore(::std::numeric_limits<::std::streamsize>::max(), '\n'); }
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
c-Compiler für mac
Von GAILTALER im Forum C/C++Antworten: 2Letzter Beitrag: 11.04.08, 15:30 -
OS-Compiler
Von Kyoko im Forum Sonstige SprachenAntworten: 13Letzter Beitrag: 15.02.05, 20:19 -
c++ Compiler
Von Martin Schroeder im Forum Linux & UnixAntworten: 1Letzter Beitrag: 11.10.04, 19:27 -
compiler
Von Pardon_Me im Forum Coders TalkAntworten: 7Letzter Beitrag: 10.02.04, 19:53 -
Compiler
Von Hannes im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 0Letzter Beitrag: 10.02.01, 21:04





Zitieren
Login






