2017-12-16 5 views
-2

Ich habe diese Funktion, die die Eingabe von Stunden und Minuten dauert. Und wenn das Trennzeichen kein Doppelpunkt ist, sollte es einen Fehler geben. Dasselbe gilt, wenn die Stunden größer als 23 und Minuten größer als 59 sind. Mit meiner aktuellen Schleife scheint die Weile bool immer wahr zu sein. Was habe ich falsch gemacht? Ich kann nichts sehen, was ich ändern könnte.While Schleife wird immer wahr C++

int delaString(string &samtalStart, int &timmarStart, int &minuterStart) { 
     istringstream is(samtalStart); 
     char colon; 
     getline(cin, samtalStart); 
     is >> timmarStart >> colon >> minuterStart; 
     while (colon != ':' || timmarStart > 23 || minuterStart > 59) { 
      cout << "Inkorrekt inmatning, var vänligen skriv in en timme mellan 00-23 och minuter mellan 0-59 i formatet tt:mm.\n" << endl; 
      getline(cin, samtalStart); 
     } 
     // is >> timmarStart >> colon >> minuterStart; 

    return(timmarStart, minuterStart); 
} 
+0

Hinweis: Wo untersuchen Sie den neuen Eingang? – molbdnilo

+0

Und was erwarten Sie von 'return (timmarStart, minuterStart)'? (Hinweis: es gibt 'minuterStart' zurück.) – molbdnilo

+0

@molbdnilo meinst du, ich sollte eine if vor der while-Schleife verwenden? – Thesar

Antwort

1

In der Funktion können Sie den Wert des Dickdarms eingestellt werden eine Lösung dieses Problems gehen einmal dann in eine Endlosschleife wie dies die string in der while-Schleife haben:

int delaString(string &samtalStart, int &timmarStart, int &minuterStart) { 

     char colon; 
     getline(cin, samtalStart); 
     istringstream is(samtalStart); 
     is >> timmarStart >> colon >> minuterStart; 
     while (colon != ':' || timmarStart > 23 || minuterStart > 59) { 
      cout << "Inkorrekt inmatning, var vänligen skriv in en timme mellan 00-23 och minuter mellan 0-59 i formatet tt:mm.\n" << endl; 
      getline(cin, samtalStart); 
      istringstream iss(samtalStart); 
      iss >> timarStart >> colon >> minuterStart; 
     } 
     // is >> timmarStart >> colon >> minuterStart; 

    return(timmarStart, minuterStart); 
} 

this helps

+0

Das Problem war, dass ich nicht schrieb istringstream ist (samtalStart); unter getline :) – Thesar

+0

Ja das ist @Thesar korrekt. Wenn das half, nicht zu vergessen, zu upvote und zu akzeptieren –

+0

musste ich 10 Minuten warten, um es zu akzeptieren :) Danke – Thesar