如何从标准输入中检测格式输入错误?

时间:2018-10-01 08:12:44

标签: c++ error-handling

当尝试输入诸如以下内容时:

Please enter the number of elements: 4

Enter the list to be sorted: 4 x3 1 6

我得到的输出是:

The sorted list is:error: invalid input

我该如何做,以便如果有错误,仅执行错误无效的输入语句,反之亦然?

#include <iostream>

using namespace std;

int main()
{
    int a[50], n, i, j, temp;
    cout << "Please enter the number of elements:";
    cin >> n;
    cout << endl;
    cout << "Enter the list to be sorted:"; 
    cout << endl;
    if (cin >> n) 
    {
        for (i = 0; i < n; ++i)
            cin >> a[i];

        for (i = 1; i < n; ++i)
        {
            for (j = 0; j < (n - i); ++j)
                if (a[j] > a[j + 1])
                {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
        }
        cout << "The sorted list is:";
        for (i = 0; i < n; ++i)
            cout << " " << a[i];
    }
    else (!(cin >> n));
    {
        cout << "error: invalid input" << endl;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您正在从n阅读cin两次。在对if的{​​{1}}测试中,您应该只检查cin,即

cin

第二个问题是您的else块

`if (cin)`

尽管格式化了

else (!(cin >> n));
{
    cout << "error: invalid input" << endl;
}

我想else { // 'n' read from cin, return value negated and discarded (!(cin >> n)) } // always executed cout << "error: invalid input" << endl; 应该在评论中

cin

答案 1 :(得分:0)

您可以执行类似的操作来进行错误检查。

1)要求用户在获取尺寸后输入数字。 2)首先将这些数字存储为字符,然后使用isdigit()函数检查用户输入是否正确。

{{route('ruangjn-edit', ['ruangjn' => $data->id])}}

3)如果输入的数字正确,请转换这些字符并将它们存储在数组中。

希望这会有所帮助。