C/C++ 标准输入方式的输入错误处理

 我来答
黑科技1718
2022-06-14 · TA获得超过5880个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:82.1万
展开全部

从输入缓冲区读一个数,希望读到的是一个从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

说明:
第一次读入的是一个超范围的整数。不清空缓冲区,请求重新输入。第二次输入时,由于缓冲区里有正在等待的内容,所以不再等待用户键盘输入,直接读入。

请仔细阅读其中注释。

请仔细阅读其中注释。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式