0

好的,所以当我遇到以前从未遇到过的问题时,我只是在做一些练习。

#include <iostream>

using namespace std;

int main()
{
string empname = "";
int empage = 0;
char yes = 'y';

cout << "Please enter employee name:" << endl;
cin >> empname;
cin.get();
cout << "Your name is " + empname + " is this correct? (yes/no):" << endl;

if (yes)
{
    cout << "good" << endl;
}
else
{
    cout << "Please try again" << endl;
}

cout << "Please enter employee age:" << endl;
cin >> empage;
cin.get();
cout << "Your age is " + empname + " is this correct? (yes/no):" << endl;
if (yes)
{
    cout << "good" << endl;
}
else
{
    cout << "Please try again" << endl;
}
}

这作为控制台程序执行,但在第 11 行 [包括空格] (cout << "请输入员工姓名:\t" << endl;) 之后,它只是跳过所有内容,并说按 ENTER 继续。我究竟做错了什么。

4

2 回答 2

7

我假设这个“按 ENTER 继续”部分来自您的环境(批处理脚本、编辑器等),因为它不在您的代码中。

问题是 cin (通常为 istream )用所有空格分隔输入,而不仅仅是换行符。所以cin >> empname实际上只存储了员工姓名直到第一个空格的部分,即名字。cin.get()只得到一个字符,所以它不会等待换行符出现。

您应该使用std::getline(in <string>) 来获取整行输入。

例子:

string empname = "";
cout << "Please enter employee name:" << endl;
getline(cin, empname);
于 2012-08-21T05:28:36.957 回答
0

您正在同时使用 cin 和 cin.get() 。正如 nnoneo 正确指出的那样,最好在此处使用 getline。除此之外,让我告诉您,每当您背靠背使用格式化和未格式化的输入时,都会出现这种错误(请记住 cin 已格式化,而 cin.get 和 getline 未格式化)。这是因为格式化输入会从流中删除空格或结束符。该字符保留在流中,下次当您尝试未格式化的输入时,该字符将进入流并进入您的变量。

为避免此字符进入其中,您可以在格式化和未格式化输入之间使用 cin.clear () 或 cin.ingore()。希望有帮助

于 2012-08-21T06:41:38.940 回答