Warum kommt die 2. Ausgabe nicht?!
-
Was bedeutet "...hört das Programm auf!"? Absturz?
Achso, lies dir mal die Threads aus dem Win32 Konsolen FAQ durch, da kannst du noch einiges rausgewinnen...
-
Nein... die Abfrage ob Männlich oder Weiblich wird nich ausgeführt!
Das Programm beendet nach
cout << "Danke " << name << endl;
-
Crew06ZW schrieb:
Nein... die Abfrage ob Männlich oder Weiblich wird nich ausgeführt!
Das Programm beendet nach
cout << "Danke " << name << endl;Das Programm läuft schon bis zum Ende durch. Das ist unter Umständen ganz normales Verhalten. Bei mir (einer Linux-Konsole) verhält sich das Programm wie gewünscht.
Ich gehe davon aus, dass ich noch Zeichen im Eingabestrom befinden (in diesem Fall ein Newline), welche von der Abfrage ob männlich oder weiblich direkt weiterverarbeitet wird.
Du musst (weil du getline verwendest) den Eingabestrom (cin) synchronisieren bzw. ""flushen"".
Warum du drei Variablen (m, w, geschlecht) definierst, obwohl du nur ein Merkmal verwendest, ist mir auch noch nicht ganz klar.
Grüße...
Heiko
-
Hm... okay!
Kannst du mir sagen wie man die Fehler nun behebt?!
-
Hallo,
Ein paar Fragen, die du dir zu deinen ersten Programmen stellen solltest:
- Wie soll das Geschlecht eingelesen werden bzw. welcher Variablentyp soll dafür verwendet werden? (Du verwendest ints, was imho nicht so viel Sinn macht, weil es sehr unintutitiv ist, wenn man z.B. 0 für mänlich und 1 für weiblich eingeben muss).
- Wie prüfst du, was der User eingegeben hat? (Dein erstes Programm gibt männlich aus, wenn du die gleiche Eingabe für die Variable eingabe und die Variable m machst... ansonsten ist die Ausgabe weiblich. Das ist auch nicht wirklich intuitiv)
- Warum schreibst du cin >> eingabe >> m || w; ?bwbg schrieb:
Ich gehe davon aus, dass ich noch Zeichen im Eingabestrom befinden (in diesem Fall ein Newline), welche von der Abfrage ob männlich oder weiblich direkt weiterverarbeitet wird.
der operator>>(char&) von istream ignoriert alle Whitespaces am Anfang. Von daher sollte diese Vermutung unkorrekt sein. (oder täusche ich micht jetzt).
Gruß, Caipi
-
Okay... ich hab jetzt alle "endl" für "\n" ersetzt... dennoch klappt es nicht!
Ich werde jetzt nochmal versuchen das Programm zu überarbeiten und gucke mal was ich anhand deiner Tipps machen kann!
Thx!
___________________________________________________________________________________
Ich habs mal anders Probiert, klappt aber immer noch nicht...

#include <cstdlib> #include <iostream> #include <strings> using namespace std; int main() { // Variablen und Strings string name; char geschlecht_eingabe, m, w; //Begrüßung + Eingabe des Namens cout << "Hallo! Wie heissen sie?!" << endl; getline (cin, name); cout << "\n"; cout << "Danke " << name; // Abfrage ob männlich oder weiblich cout << "Bist du eine Frau oder ein Mann? (m/w) \n"; cin >> geschlecht_eingabe; switch (geschlecht_eingabe) { case 'm': cout << "Okay, Herr \n" << name; break; case 'w': cout << "Okay, Frau \n" << name; break; default: cout << "Die Eingbe ist ungueltig!" << endl; } system ("PAUSE"); return 0; }
-
Die Ausgabe ist schon ok, da kannst du ruhig das endl lassen. Nur bei der Eingabe könnte was schieflaufen, setz mal vor das
cin >> geschlecht_eingabe;eincin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n');.
-
Klappt immer noch nicht!
Man!!!! So schwer kann das doch net sein!!!
Was mache ich den nur falsch!
-
die lösung ist einfach:
bei deiner if abfrage
if (geschlecht == m)liegt der fehler. denn hier vergleichst du den INHALT der variablen geschlecht mit den INHALT der variablen m, und nicht mit dem ASCII-zeichen m.
die richtige abfrage sieht dann so aus:
if (geschlecht == 'm')
-
Ups!

JUHU! Endlich hab ich meinen Fehler entdeckt!
1A! Danke dir!
