[英]Getline() combined with cin.ignore() is not storing variable? (Bug)
我不認為這個問題是不是重復這個 。 即使它是由同一件事引起的,它也是問題的不同體現。
運行此程序時,終端輸出如下所示(我的輸入是1
, Rock Lee
然后是enter
):
輸入數字:
1
輸入您的名字:
Rock Lee
名稱為空。
但是,名稱不能為空。 為什么名稱變量為""
? 如何解決此錯誤? 這是代碼:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main () {
int num;
string name;
cout << "Enter a number: ";
cin >> num;
cout << "Enter your name: ";
getline(cin, name, '\n');
cin.ignore (1000, '\n');
if (name == "")
{
cout << "Name is blank.";
return -1;
}
return 0;
}
另外,請注意,我想在解決方案中使用Getline(),並且希望能夠讀取整行(因此名稱可以是任何東西,而不僅僅是名字和姓氏)。
當我嘗試注釋掉cin.ignore(1000, '\\n');
,它給出的輸出也是不正確的:
輸入數字:
1
輸入您的姓名:名稱為空。
甚至都沒有機會輸入我的名字。 我該如何解決?
cin >> num
讀取直到看到空白,但它不會丟棄空白,因此在輸入中保留了'\\n'
。 您對getline
調用將看到它並立即返回,用空字符串填充name
。 您需要在getline
之前調用cin.ignore
來忽略cin::operator>>
剩下的'\\n'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.