C++ cin >>不再开始

C++ cin >> not starting again

本文关键字:gt 再开始 不再 cin C++      更新时间:2023-10-16

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

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

#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,然后按enter以停止cin。然后程序就结束了。这(ctrlZ)是导致while(cin >> locateName)不接受新值的原因吗?感谢您的帮助。

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

要使cin恢复到良好状态,可以调用cin.clear()。一旦它恢复到良好状态,它将再次接受输入。