C++ Erkennen ENTER-Taste durch den Benutzer gedrückt
Ich habe eine Schleife, wo ich den Benutzer auffordern, einen Namen einzugeben. Ich muss stoppen, wenn der Benutzer die EINGABETASTE drückt..... oder wenn 20 Namen eingetragen wurden. Aber meine Methode nicht zu stoppen, wenn der Benutzer die EINGABETASTE drückt
//loop until ENTER key is entered or 20 elements have been added
bool stop = false;
int ind = 0;
while( !stop || ind >= 20 ){
cout << "Enter name #" << (ind+1) << ":";
string temp;
getline(cin, temp);
int enterKey = atoi(temp.c_str());
if(enterKey == '\n'){
stop = true;
}
else{
names[ind] = temp;
}
ind++;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wandeln Sie das Lesen von string in integer mit
atoi
:Wenn temp ist ein string wie
"1234"
diesenterKey
zu1234
. Dann vergleichen SieenterKey
zu den ASCII-Wert\n
. Dies ist den meisten wahrscheinlich nicht tun, etwas sinnvolles.Auch
std::getline
nur Lesen, werden die Zeichen bis zum, aber nicht einschließlich, der nächste'\n'
. Wenn ein Benutzer die EINGABETASTE drückt, ohne die Eingabe von anderen Zeichen,std::getline
wird ein leerer string zurückgegeben. Wenn ein string leer ist, kann leicht geprüft werden, mit seinenempty()
Methode:getline Essen Ihre Trennzeichen, das '\n', so dass Sie wahrscheinlich wollen zu überprüfen, die für einen leeren string. Tun Sie es, bevor der Aufruf von atoi.
versuchen:
oder:
for
Schleife ist der Weg zu gehen. Dein code hat einen Fehler, obwohl. Der resultierende Vektor wird mit 20 leeren Saiten, gefolgt von einigen Reihe von Antworten.Versuchen
stop = temp.empty()
statt.getline
enthält keine neue-Zeile-Zeichen. Eine leere Zeile sollte im Ergebnis eine leere Zeichenfolge.Auch Charles ist es korrekt, deine while-Bedingung falsch ist, verwenden Sie
while( !stop && ind < 20)
. Die Art und Weise haben Sie es geschrieben, muss der Benutzer geben Sie 20 Werte, und eine leere Zeile. Charles' ändern sagt zu unterbrechen, wenn eine der beiden Bedingungen erfüllt ist (wenn nicht beide).Der Vollständigkeit halber, hier ist der neue vorgeschlagene code:
Persönlich würde ich den code schreiben, wie folgt:
Den Sie verwenden möchten cin.get(); cin >> temp; ich glaube.
cin >> temp
wird nur ein token. Es ist möglich OP will Aussagen, dass keine Leerzeichen enthalten.