C ++ cin>>不要重新开始

时间:2016-03-26 05:35:39

标签: c++ cin

好的,所以我正在为一本C ++编程书做练习,它要求我创建一个程序,我在这些名称旁边输入名称和分数,它们都保存在向量中。然后,在我完成输入后,它会提示我输入一个名字,然后它会找到该名称的相应分数。 e.x.我输入“John”它返回5,如果这就是我把John的得分作为。

我遇到的问题是,在用户输入姓名和分数后,我的程序提示用户输入名称(以查找相应的分数),代码跳过{{1}命令并继续前进,使我的程序无法运行。我将发布完整的程序,然后我需要帮助的部分:

#include "std_lib_facilities.h"

int main()
{
vector<string>names;
vector<int>scores;
string name = "";
int score;
while(cin >> name &&  cin >> score)
{
        for(int i = 0; i < names.size(); ++i) // checks all previous words
        {
            if(name == names[i]) // if the name is used twice, exit
            {
                cout << "Error. Terminating...\n";
                exit(4);
            }
            else;
        }

        names.push_back(name);
        scores.push_back(score);
}

cout << "Enter a name, which I will find the score for. \n";
string locateName;
while(cin >> locateName) // i think the program won't accept the locateName
{

    for(int i = 0; i < names.size(); ++i)
    {
        if(locateName == names[i])
        {
            cout << names[i] << "'s score is " << scores[i] << '\n';
        }
        else { cout << "Name not found. \n"; }
    }

}
return 0;
}

以下是无效的部分:

cout << "Enter a name, which I will find the score for. \n";
string locateName;
while(cin >> locateName)
{

    for(int i = 0; i < names.size(); ++i)
    {
        if(locateName == names[i])
        {
            cout << names[i] << "'s score is " << scores[i] << '\n';
        }
        else { cout << "Name not found. \n"; }
    }

}

具体来说,while(cin >> locateName)。这里有一些额外的信息:每当我输入名字(John 5 Bob 6 Pete 9)时,我按 CTRL + Z 然后输入来停止cin。然后程序结束了。这是(ctrlZ)是什么导致while(cin >> locateName)不接受新值?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

CTRL + Z被解释为文件结束标记。在cin看到该标记后,它会进入错误状态(cin.eof()cin.fail()将为true,这意味着(bool)cin将为false ,这就是你的第一个循环停止的原因)。处于错误状态时,cin将不再接受任何输入。

要让cin恢复到良好状态,您可以致电cin.clear()。一旦它恢复到良好状态,它将再次接受输入。