今天给大家讲一下对于C语言初学者可能会遇到的问题
1.scanf函数的返回值
下面有一段简单代码:
从运行结果中看完全没问题
但如果你是用VS编译器,就会出现以下警告:
提示 返回值被忽略:"scanf" (其实这种情况我们完全可以忽略它,就当成代码是正确的来看待)
想深入了解的可以往下看哈哈!
推荐大家去 cplusplus 网站去查这个函数(不仅是这个函数,它的功能挺强大的),以下是我查的,可以看到返回值类型为 int
我们不妨用一个整型变量来接收它,然后再输出。
上干货:scanf返回值输入的数据的个数(通俗点就是scanf()的双引号里有几个%号),不过前提是要正确输入数据。
什么是正确输入数据:
上示例代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>int main() {
int a = 0;
int b = 0;
int c = 0;
printf("请输入三个整数:");
int x = scanf("%d%d%d",&a,&b,&c);
printf("%d",x);return 0;
}
1.如果输入 1 2 3, 返回值为 3
2.如果输入 1 2 a, 返回值为 2 (a表示我没按照scanf的格式符%d输入,也就是不符合格式符形式的输入)
3.如果输入 1 a a, 返回值为 1
4.如果输入 a a a, 返回值为 0
5.如果输入 a 1 2, 返回值为 0
6.如果输入 a 1 a, 返回值为 0
结论 :scanf返回的是到第一个错误输入为止 (如果没有错误输入,那就到结尾) 所有符合格式符输入的个数。
但是
改一下语句
int x = scanf("%d%d%d",&a,&b); 去掉了&c
输入 1 2 3, 返回值为 3
此式子中格式占位符%d有三个,但对应的输入表项只有两个,但是运行时依旧被要求输入三个(windows,VS/DevC++)。输入的第三个整数确实没有承接变量,它被放到了缓冲区里面。但当输入是 1 2 3 三个整数时,返回值仍是3。
结论: scanf函数的返回值反映的是按照指定的格式符正确读入的数据的个数。而不管你输入表项是否齐全。(通俗点说,就是在正确输入数据的前提下,双引号中%号的个数)。