2016-03-28 5 views
0

Nachdem ich diesen Code ausgeführt habe, wird es mich auffordern, den ersten Pfad einzugeben, z. c:/Hallo, und gebe einen zweiten Pfad ein, z. c:/Welt.C++ erstes Zeichen druckt nicht mit getline

Ausgang:

  • Erster Pfad: c:/hello
  • Zweiter Weg: :/world

Wie Sie den zweiten Weg sehen eine c vor fehlt. Aber nachdem ich cin.get() nach cout entferne < < "Zweiten Pfad eingeben:"; es kann das c vorzeigen. Kann mir jemand erklären, warum ist das so?

system("cls"); 
cout << "Enter first path: "; 
cin.get(); 
getline(cin, firstPath); 
cout << endl; 
cout << "First path: " << firstPath << endl; 
cout << endl; 
cout << "Enter second path: "; 
//cin.get(); // Need to be remove to shows c:/world 
getline(cin, second path); 
cout << endl; 
cout << "Second path: " << secondPath<< endl; 
cout << endl; 
system("pause") 
system("cls"); 
+4

Was denken Sie 'cin.get()' tut? –

+0

Versuchen Sie mit gets (str) –

+0

Take in char? Aber der erste Pfad hat kein Problem. –

Antwort

0

TL: DR; löschen Ihre cin.get(); Linien


cin.get(); löschen es ein Zeichen von cin gelesen wird, und so die nächste Lese von cin werden die nächsten Zeichen, so im zweiten Fall die „c“ gelesen wird durch cin.get() lesen und daher liest der nächste gelesene, getline(cin, second path) es nicht (es wurde bereits gelesen). Warum die „c“ gelesen wird, nachdem der erste Einsatz von cin.get() ist ein Geheimnis (vielleicht Sie tippen ein Leerzeichen vor dem „c“?

Nur cin.get() verwenden, wenn Sie das nächste Zeichen auf dem Eingangsstrom erhalten möchten und Speichern Sie es irgendwo (zB char c = cin.get(), in diesem Fall c == 'c'). Wenn Sie das aktuelle Zeichen überspringen möchten, verwenden Sie cin.ignore(), was die gleiche Sache wie cin.get() tut, außer Sie können wählen, wie viele Zeichen zu überspringen, und es nicht zurückkehrt lesen Sie die Zeichen, es wäre unpassend, diese in dieser Situation zu verwenden.