我不认为这个问题不是this的重复。即使它是由同一件事引起的,但它是问题的不同表现形式。
运行此程序时的终端输出如下所示(我的输入为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
输入您的姓名:姓名为空白。
它甚至没有机会输入我的名字。我该如何解决?
答案 0 :(得分:2)
cin >> num
读取直到它看到空格,但它不会丢弃空格,因此它会在输入中留下'\n'
。您对getline
的调用会看到它并立即返回,使用空字符串填充name
。您需要在cin.ignore
之前致电getline
,以忽略'\n'
留下的cin::operator>>
。