C ++检测用户按下的ENTER键

时间:2010-05-10 14:41:32

标签: c++ user-input getline

我有一个循环,我要求用户输入一个名字。当用户按下ENTER键.....或者输入了20个名字时,我需要停止。但是,当用户按下ENTER键

时,我的方法不会停止
//loop until ENTER key is entered or 20 elements have been added
bool stop = false;
int ind = 0;
while( !stop || ind >= 20 ){

    cout << "Enter name #" << (ind+1) << ":";
    string temp;
    getline(cin, temp);
    int enterKey = atoi(temp.c_str());        

    if(enterKey == '\n'){
        stop = true;            
    }
    else{
        names[ind] = temp;
    }

    ind++;


}

5 个答案:

答案 0 :(得分:4)

您将读取的字符串转换为atoi的整数:

int enterKey = atoi(temp.c_str());        

如果temp是类似"1234"的字符串,则会将enterKey设置为1234。然后,将enterKey\n的ASCII值进行比较。这很可能没有做任何有用的事情。

同样std::getline只需阅读下一个'\n'的字符,但不包括这些字符。如果用户只按Enter键而不键入任何其他字符,std::getline将返回一个空字符串。如果字符串为空,则可以使用empty()方法轻松测试:

getline(cin, temp);
if (temp.empty()) {
  stop = true;
}

答案 1 :(得分:2)

尝试:

while( !stop && ind < 20 )

或:

using namespace std;
vector <string> names; // edited.
for (int ind = 0; ind < 20; ++ind)
{
    cout << "Enter name #" << (ind+1) << ":"; 
    string temp;
    getline(cin, temp); 
    if (temp.empty())
        break;
    names.push_back(temp);
}

答案 2 :(得分:2)

getline将占用你的分隔符,它将是'\ n',所以你可能想要检查一个空字符串。在打电话给atoi之前做。

答案 3 :(得分:1)

请尝试使用stop = temp.empty()getline不应包含任何换行符。空行应该会产生一个空字符串。

此外,Charles是正确的,您的状况不正确,请使用while( !stop && ind < 20)。你写它的方式用户需要输入20个值和一个空行。当任何一个条件得到满足时,查尔斯的改变就会破裂。(

为了完整起见,这是建议的新代码:

bool stop = false;
int ind = 0;
while( !stop && ind < 20 ){

    cout << "Enter name #" << (ind+1) << ":";
    string temp;
    getline(cin, temp);
    if(temp.empty()) {
        stop = true;
    } else {
        names[ind] = temp;
    }

    ind++;    
}

就个人而言,我会按如下方式编写代码:

vector<string> names;
for(int ind = 0; ind < 20; ind++) {
  cout << "Enter name #" << (ind + 1) << " (blank to stop): ";
  string name;
  getline(cin, name);
  if(name.empty() || cin.eof()) {
     break;
  }
  names.push_back(name);
}

cout << "Read " << names.length() << " names before empty line detected." << endl;

答案 4 :(得分:0)

你想使用cin.get(); cin&gt;&gt;温度;我相信。