今天我们来聊一聊我们C语言当中经常会用到的一个函数scanf函数,它是一个输入函数,作用简单来说就是:向一个变量地址里面传值。函数最基本格式就写作:scanf("%格式符“,&变量),而即便是这样一个比较简单的结构,也蕴藏着很多我们可能不知道的操作方法。
1.提出问题及分析问题:
我们知道,scanf可以依次给各个变量地址进行传值操作,但是如果有一天有一个人给你抛出这么一个问题:我要对多组数据进行加法运算的操作,每次操作我都要得到两个数据的和的值,但是我事先并不清楚我数据的个数,请你帮我编写程序实现这么一个逻辑。
eg:输入:1 2 3 4 5 6 输出:3 7 11——依次是1+2,3+4,5+6的结果,那么这里你能不能控制变量的个数来控制这个输入,显然不现实,因为我们之前说了,我们事先并不清楚我读入了多少个数据······这里其实你对scanf的返回值有一定了解的话,这种问题就可以迎刃而解了!
2简单介绍一下scanf的返回值
在cpp reference官网上面你可查询到,scanf函数是有返回值的,它的返回值是int类型,这个返回值如何确定呢,分为一下两种情况:
1.通过scanf正常读取到数据,此时scanf的返回值总是与它读取到的数据个数保持一致。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a, b;
int ret=scanf("%d,%d", &a, &b);
printf("%d", ret);
return 0;
}
运行结果1:
运行结果2:
测试说明:作者的scanf输入不同数据通过逗号加以区分的,各位读者也可以尝试用空格加以区分,那么这个时候计算机怎么知道你只读取一个数据的情况呢,很简单,键盘上Ctrl+Z就可以了!
2.通过scanf一个数据都没有得到:这个时候它会返回0吗?不对它会给你返回一个EOF(end of file的缩写,在标准C语言里面规定,这个值的大小为-1):
最后的总结:scanf函数啊,我们不难发现,只要形式确定了,它的返回值的可能取值也就确定了下来。eg:你写了一个scanf("%d %d",&a,&b);那么这个scanf就有三种可能的返回值,分别是:2,1,-1。
3.提出解决方案:
因此我们可以就上面那个问题,提出下面两种解决方案:
解决方案1:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a, b;
int sum;
while (scanf("%d,%d", &a, &b) == 2)
{
sum = a + b;
printf("%d\n", sum);
}
return 0;
}
解决方案2:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a, b;
int sum;
while (scanf("%d,%d", &a, &b) != EOF)
{
sum = a + b;
printf("%d\n", sum);
}
return 0;
}
运行结果:
这样我们就清楚了,我们可以通过我们所学的知识和while循环来实现数据的多组输入,问题也就得到了解决,谢谢大家!