比如我们想要用户输入一个整数(并且我们已经给出了提示信息),但是用户难免会因为点错了等原因输入错误,导致我们没有得到想要的输入。这种情况我们应该怎么办呢?
1、用户输入错误时直接退出程序
2、用户输入错误时,将用户输入的数据清空并提示用户重新输入
下面我们针对1、2点给出例子:
假如我们要让用户输入最多五天的捕鱼量,最后输出平均值。
我们先看看结果再来讲讲代码:
程序开始:
输入5个符合要求的数字:
一开始就输入不符合的输入比如字符:
后来输入字符:
这就是这个程序的功能,下面讲讲代码:
12行以前都没什么好说的,就是一些打印在屏幕上的提示信息以及初始定义存放数据的数组和数组长度。在13行的while的判断语句中 i<Max保证我们输入最多五天的数据,于是在输入数据不超过5个情况下前面一个判断式为true,而cin>>fish[i],因为我们fish数组是定义为double型的,所以如果你的输入是字符型等不符合的输入cin>>fish[i]就会返回false,于是这个判断式确保我们的输入是符合要求的!后面的代码也没什么好说的就是求个累加和再求平均。
关键还是在13行!
下面我们看看第二个例子,当用户输入错误时清空错误输入并提示用户重新输入:
先看看结果:
可以看到不管是输入为字符还是中间有空格还是一开始就有空格的情况下都能提示用户重新输入输入并成功计算最终结果!
下面讲讲代码:
同样的,12行以前都比较常规。主要是13行的while循环体内,当cin>>fish[i]为false即输入不符合要求时进行while循环。while循环里先cin.clear()重置输入,然后第二个while循环是为了清除糟糕的输入,即当cin.get检测到其他字符时就会continue跳出本次while循环,直至检测到\n换行符判断你已经输入完毕,然后提示你输入一个数字,然后回到外面那个while循环继续输入!
发现个小坑,当我们的输入前几个个字符是数字,后面的不是时会出现奇怪的结果:
我的猜测是第13行cin>>fish[i]时因为第一个为数字4,所以跳出while循环,然后打印fish#2,然后再次到13行时我们的cin读取的是队列中的@此时执行while循环。但是按理说输入为44d时前两个4都会i跳出while循环,但是却只跳出了一次,不知道为什么。