总所周知,scanf是C提供的库函数的内容,而绝大多数定义的函数都会有一个返回值。
那么scanf的返回值是什么呢?
查了CPP的解释后,返回值就是返回的是scanf读取的数据的个数。
这个概念可能比较抽象。先看如下示例:
我们来看第1个例子:
int main() { int a = 0; int b = 0; int n = scanf("%d %d", &a, &b); printf("%d\n", n); }
输出结果为: 2
第2个例子:
int main() { char a = 0; char b = 0; int n = scanf("%c", &a); printf("%d\n", n); }
输出结果为 :1
如上可见,
当scanf中要读取1个数据时(任何类型),scanf的返回值为1;
当scanf中要读取2个数据时(任何类型),scanf的返回值为2;
当读取类型和输入类型冲突时,(即输入的格式为%d,键盘却输入了一个字符a,),此时scanf不能读取任何值,返回值为0;
那么这个有啥用呢?
不着急,我们先来看下面这个题目
输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。
输入描述:
多组输入,每行输入包括一个整数表示的智商。
输出描述:
针对每行输入,输出“Genius”。
咋一看好像没什么问题,但你细品————“多组输入” !
说明输入一个数据按回车后,程序不能退出,要进行下一次循环;
问题来了,如何实现? 写无数个if函数一直判断?(代码长 且 中间不能退出)
这时候只需要一个表达式
while (scanf("%d", &a)==1)
int main() { int a = 0; while (scanf("%d", &a)==1) { if (a >= 140) printf("YES\n"); else printf("NO\n"); } return 0; }
若返回值为1 ,则会进入while循环,
若返回值不为1,则会跳出while循环,结束函数。
那么如何令返回值不为1呢?
- 输入一个数字以外的字符,如:a,b,;,+;
- 同时按下Ctrl和z;
我们对Ctrl+z作出解释:
先介绍一个:EOF(end of file)(文件结束标志)。
printf("%d", EOF); 输出为-1
只需在键盘输入时输入Ctrl+z便可以引用EOF,直接使得scanf返回值为-1
注意此时就不是给a赋值了
int main() { int a = 0; int b = 0; int n = scanf("%d %d", &a, &b); printf("%d\n", n); printf("%d", EOF); }
输出值:-1
-1
但当我们用VS实践时却发现如下问题:
为什么要连续输入三个Crtl+z?
这里目前可以理解为VS独有,平时就记成输入一个Crtl+z就能停止就行了
谢谢大家,求个赞!!