C语言防止非法字符输入

您所在的位置:网站首页 retcode翻译 C语言防止非法字符输入

C语言防止非法字符输入

2023-08-22 15:13| 来源: 网络整理| 查看: 265

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