好的,所以当我遇到一个我以前从未遇到过的问题时,我只是做了一点练习。
#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&lt;&lt;“请输入员工姓名:\ t”&lt;&lt; endl;)之后,它只是跳过所有内容,然后按下输入继续。我做错了什么。
答案 0 :(得分:7)
我认为“按ENTER继续”部分来自您的环境(批处理脚本,编辑器等),因为它不在您的代码中。
问题是cin(一般是istream)用所有空格分隔输入,而不仅仅是换行符。因此cin >> empname
实际上只将员工姓名的一部分存储到第一个空格,即第一个名称。 cin.get()
只获得一个字符,因此它不会等待换行符出现。
您应该使用std::getline
(在&lt; string&gt;中)来获取整行输入。
示例:
string empname = "";
cout << "Please enter employee name:" << endl;
getline(cin, empname);
答案 1 :(得分:0)
您正在使用cin和cin.get()。正如nneoneo正确指出的那样,在这里更好地使用getline。 除此之外,让我告诉你,无论何时你使用格式化和未格式化的输入背靠背,你会得到这种错误(记住cin已格式化,cin.get和getline未格式化)。这是因为格式化输入会从流中删除空格或结束字符。该字符保留在流中,下次当您尝试无格式输入时,该字符将进入流并进入变量。
为了避免让这个角色进入它,你可以在格式化和未格式化的输入之间使用cin.clear()或cin.ingore()。 希望有所帮助