提示用户输入直到正确的C ++

时间:2017-01-05 01:25:54

标签: c++ input

我正在尝试编写一个代码来提示用户输入来自cin。

mysqli_error()

但是,当我输入非整数类型时,编译器会继续打印“重新输入有效值!”这一行。我不知道我的代码有什么问题!有人可以纠正吗?非常感谢你。

3 个答案:

答案 0 :(得分:4)

试试这个:

bool done = false;
int year;

for (std::string line;
     std::cout << "Enter a year: " && std::getline(std::cin, line); )
{
    std::istringstream iss(line);
    if (iss >> year >> std::ws && iss.get() == EOF) { done = true; break; }
    std::cerr << "Failed to parse input '" << line << "', please try again.\n";
}

if (!done) { std::cerr << "Premature end of input.\n"; }
else       { std::cout << "Input: " << year << "\n";   }

答案 1 :(得分:2)

这是我的方法:

int main() {
    int year;

    while (true) {
        cout << "Enter a valid year: ";
        cin >> year;
        if (cin.fail()) {
            cin.clear(); cin.ignore();
            cout << "Re-enter a valid value! " << endl;
        } else break;
    }
    return 0;
}

答案 2 :(得分:0)

您所描述的问题在于:

while (cin.fail())
{
    cout << "Re-enter a valid value! ";
}

看起来你还没有完全理解这里发生了什么,所以我会为你解决这个问题。

代码翻译成如下:

“当cin.fail()为true时,输出”重新输入有效值! “到控制台”

它将持续发挥作用,因为没有办法摆脱循环。

我不认为cin.fail()是你想在这里使用的,看起来你想要一个算法告诉你日期是否有效,如果它无效,重复查询到用户可以输入好的数据。从概念上讲,这是一种很好的做法,你是在正确的轨道上,但你需要学习更多。

我建议阅读一些有关输入/输出的教程,并研究输入验证。

这是学习C ++ http://www.cplusplus.com/doc/tutorial/

的绝佳资源

以下是有关输入验证的一些信息http://www.cplusplus.com/forum/beginner/121194/