user输入String而不是Int

时间:2013-12-23 14:43:21

标签: c++

我们已尝试搜索此问题,但我们未找到任何答案。如果用户在系统需要整数时输入一个字符串变量,那么如何使用while循环来避免问题?

{

    int grade_var=0,grade_1=0,sum=0;

    cout<<"Enter the number of grades you have:\t";


    cin>>grade_var;


    for(int i=1;i<=grade_var;i++)

我不希望做一个while循环,因为我的程序有很多整数插入,并且想知道一种更简单的方法来纠正而不是while循环?

3 个答案:

答案 0 :(得分:2)

虽然循环通常是要走的路。

但是,为了保持代码干净,您可能需要考虑将所述while循环放入辅助函数中,这样您就可以从代码中的任何位置调用PollForIntegerInput(字符串提示符),然后在一个位置处理该输入。几乎没有理由你应该像这样重复输入循环。

至于一个真正无关的答案,我没有。

答案 1 :(得分:2)

在流上调用operator>>会返回流本身,可以将其转换为bool以检查流是否处于良好状态。如果发生错误提取,则流不是良好状态。所以你可以这样做:

if (cin >> grade_var)

这将检查它是否成功。如果不成功,你可以否定条件来找到它。你如何处理这种情况取决于。也许你会在失败的早期return。但是,如果要重新提示用户输入正确的内容,则需要循环。

答案 2 :(得分:1)

你的问题是什么不太清楚,但是......

输入数据的数量几乎总是很差 接下来的几点。如果你期望一系列的int,为 例如:

std::vector<int> grades;
int grade;
while ( std::cin >> grade ) {
    grades.push_back( grade );
}

它没有那么简单。

如果您确实想要坚持输入的确切数量,请输出 用户输入错误的错误,通常 模式将是:

std::vector<int> grades;
while ( grades.size() != targetNumber ) {
    int grade;
    while ( !(std::cin >> grade) ) {
        std::cout << "Integer wanted" << std::endl;
        std::cin.clear();
        std::cin.ignore( INT_MAX, '\n' );
    }
    grades.push_back( grade );
}

仍然没有for。 (实际上,带有输入的for循环非常非常 罕见的。)