虽然循环没有中断,使用cin.ignore和cin.clear()来验证输入

时间:2017-01-02 01:43:47

标签: c++

我尝试使用循环来验证输入等级是否为整数,但是当我故意输入字符时,程序什么都不做。它只在按输入时开始换行。

void fillvector(vector<student>& parameter)         
{
string newname;
int newgrade;
int number;
cout << "How many students are in your class: ";
cin >> number;  
for (int i = 0; i < number; i++)
{
    cout << endl << "Enter student name: ";
    while (1)
    {
        cin >> newname;
        cout << "Enter student grade: ";
        cin >> newgrade;
        if (cin.fail())                                                         
        {
            cout << endl << "Grade must be an integer value, try again.";
            cin.clear();
            cin.ignore(INT_MAX);
            i--;
            break;
        }
        else
        {
            student student(newname, newgrade);
            parameter.push_back(student);
            break;
        }
    }
}
cout << endl;
} 

1 个答案:

答案 0 :(得分:1)

  

cin.ignore(INT_MAX);

这会使cin忽略您输入的所有其他字符MAX_INT ..

你想要的是忽略下一个newline

cin.ignore(INT_MAX, '\n');

此外,在第一次迭代中使while(1)循环在所有路径中中断是没有意义的。你可以删除那个内循环。