gpt4 book ai didi

c++ - C++中的输入错误检查

转载 作者:行者123 更新时间:2023-11-28 06:25:18 26 4
gpt4 key购买 nike

    int x; // intitialize x but don't immediately prompt for input. This makes the program more user friendly

cout << "Enter a year to check if it's a leap year: " << endl;
cin >> x;

while (cin.fail()) // check for input error

{
cin.clear();
cin.ignore();
cout << "You entered an incorrect value. Try again" << endl;
cin >> x;
}

我无法理解失败状态在 C++ 中的工作原理。我想要发生的是,如果用户输入除数字之外的任何内容,它将清除缓冲区并提示进行另一个输入。我的代码似乎无法做到这一点。如果我输入类似 say, r4 的内容,那么我的其余代码(工作得很好,所以我没有在下面显示)将与这四个一起运行。似乎循环在某个时候被激活了。 cout 字符串仍然被打印出来。只是它没有给我机会重新输入并继续检查。

最佳答案

下表,取自http://en.cppreference.com/w/cpp/io/basic_ios/fail , 显示了影响 istream::fail()

返回值的各种状态

enter image description here

鉴于此,您应该使用:

while (cin.fail()) // check for input error
{
if ( cin.eof() )
{
// Once EOF file has been reached with cin,
// you can't do much. Figure out a way to bail
// from the loop.
}

cin.clear();

// Also, ignore not just one character but till the end of the line.
// cin.ignore();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

cout << "You entered an incorrect value. Try again" << endl;
cin >> x;
}

关于c++ - C++中的输入错误检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com