簡體   English   中英

基本的cout / cin問題

[英]Basic cout/cin question

cin >> Input; {
 if(Input == "a")
  Position = "first";
 else if(Input == "b")
  Position = "second";
 else if (Input == "c")
  Position = "third";
 else if(Input == "Stop")
  break;
 }

在cin >>輸入之后,我還有兩個cin部分。 由於某種原因,它會跳過Name的getline。 在我>>輸入后,它會顯示Name(名稱):Status(狀態):然后執行getline(狀態)操作。

  cout << "Name: ";
   getline(cin, Name);
   if(Name == "Stop")
   break;

 cout << "Status: ";
  getline(cin, Status);
  if(Status == "Stop")
  break;

我認為應該是這樣的:

 cin.getline(whatever);
 cin.ignore(1, '\n');

請參閱,當您從stdin中讀取了一些文本時,字符串結尾由\\n確定(默認情況下)。 當您在控制台窗口中單擊“返回”時,將跳過該符號,但是該符號存在。 因此,當您嘗試讀取下一個字符串時,它會遇到先前被遺忘的 \\n並終止讀取並返回一個空字符串。

閱讀這個詳細信息。

問題在於,大多數輸入操作會將換行符保留在輸入緩沖區中(而不是getline() ),更多信息在此處
在您的情況下,此行:

cin >> Input; {

將留下/n后面的內容,該內容稍后將提供給:

getline(cin, Name);

快速解決方案:

替換cin >> Input; getline(cin, Input);

cin >> somevar離開了換行符。 不管somevar是什么類型,即使它是std :: string,該語句也不會讀取行字符的結尾。 因此,當到達名稱部分時,您將讀取somevar行的行尾,該行顯然是空的。 在嘗試讀取名稱之前先扔一條getline,這應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM