C语言防止非法字符输入 |
您所在的位置:网站首页 › retcode翻译 › C语言防止非法字符输入 |
PPT上猜数字的防止非法字符输入的写法: ret = scanf("%d", &guess); while (ret != 1) { while (getchar() != '\n'); printf("please guess:"); ret = scanf("%d", &guess); } counter++; 1 ret的用法百度某回答说:“scanf函数成功输入的数值个数 我们可以通过判断if(scanf("%d",&man)==1)判断是否输入成功。” 原来的代码看起来是将scanf读到的值赋给ret? 于是查到了 c语言scanf("%d%d",&a&b)解释与EOF的使用来源于:https://blog.csdn.net/qq_37909508/article/details/79498051 scanf("%d%d", &x, &y): 如果x和y能够被成功读入,那么scanf的返回值就是2 如果只有a被成功读入,返回值为1 如果a和b都未被成功读入,返回值为0 如果遇到错误或遇到end of file,返回值为EOF。 EOF:EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。 所以是将scanf的返回值给ret,因此可以理解基于ret的操作为什么是与1比较大小了。 2 对第四行的理解为什么这句话可以起到“清除输入缓冲区的非法字符”的作用? “这句循环执行getchar语句,会依次读取缓冲区的字符直到回车键结束符,读取完成后执行一句空语句“;”,这样所有缓冲区的字符都读入程序并依次被覆盖执行了。” 就是说 当getchar()函数的返回值一直不等于回车符的话,就执行while后的语句;但while后面只有一个分号,也就是一个空语句。 直到收到回车符前,getchar()会一直从缓冲区中提取一个字符,然后与回车符比较,作为循环继续与否的判断条件;只要为true,就会一直执行getchar取字符、比较的过程。 当取到了回车符,也就不再符合循环控制表达式时,退出循环。 因此这句话的目的是“不断读取用户输入的字符,当读取到的字符为回车符的时候停止循环。” 接下来继续提醒用户重新输入,再重新赋值、比较,直到输入正确,退出循环。再计数。
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |