C/C++ 标准输入方式的输入错误处理
从输入缓冲区读一个数,希望读到的是一个从0到100的整数(闭区间)。
为方便输入者,我们适当提供提示,但无法预测输入者是否按照我们的规定在输入。
注:上述第二种情况,由于输入流状态正常,说不定后面有一个正确的数据等着呢。如果直接把它清除掉,就不妥了。但对于第三种情况,输入流状态已经出错了(相当于一条河流上游被污染了,不再适合取水),只能清空重来。
输出:
请输入一个 [0, 100] 之间的整数。
输入:
102
输出:
输入错误。请重新输入。
请输入一个 [0, 100] 之间的整数。
说明:
超出需要的范围,请求重新输入。
输出:
请输入一个 [0, 100] 之间的整数。
输入:
102 103
输出:
输入错误。请重新输入。
请输入一个 [0, 100] 之间的整数。
输入错误。请重新输入。
请输入一个 [0, 100] 之间的整数。
说明:
首先读入102,发现超出范围了。但是输入流状态正确,所以发出重新输入的请求,但不清空缓冲区。由于缓冲区里还有正在等待被读入的内容,不需要等待用户再次键盘输入,直接读就行了。下一次读取时直接将正在等待的103读进去,发现还是超范围,于是再次请求重新输入。
输出:
请输入一个 [0, 100] 之间的整数。
输入:
abc
输出:
输入错误。请重新输入。
请输入一个 [0, 100] 之间的整数。
说明:
输入的不是整数。
输出:
请输入一个 [0, 100] 之间的整数。
输入:
abc def 12
输出:
输入错误。请重新输入。
请输入一个 [0, 100] 之间的整数。
说明:
第一次读入的不是整数,导致输入流错误,应该清空缓冲区。于是,后面的def,以及正确数据12,都被清空了。
输出:
请输入一个 [0, 100] 之间的整数。
输入:
641 54
输出:
输入错误。请重新输入。
好耶!获得整数 54
说明:
第一次读入的是一个超范围的整数。不清空缓冲区,请求重新输入。第二次输入时,由于缓冲区里有正在等待的内容,所以不再等待用户键盘输入,直接读入。
请仔细阅读其中注释。
请仔细阅读其中注释。