如何让我的程序等待键盘输入?

时间:2012-08-21 05:18:20

标签: c++ input keyboard

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

#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;)之后,它只是跳过所有内容,然后按下输入继续。我做错了什么。

2 个答案:

答案 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()。 希望有所帮助

相关问题