总所周知,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呢?

  1. 输入一个数字以外的字符,如:a,b,;,+;
  2. 同时按下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就能停止就行了


谢谢大家,求个赞!!

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐