1.scanf基础用法
scanf函数在处理用户输入的原理是,用户出入的数据先放在缓存里面,等到按下回车键时,scanf函数才会按照占位符,对缓存的内容进行依次解读。解读用户输入的值时,scanf函数会从下一次遗留的字符开始解读直到解读完,或者知道遇到不符合占位符类型的字符。
e.g.
#include<stdio.h>
int main()
{
int a;
double b;
//如果我们直接输入3.14159
scanf("%d",&a);
//scanf函数会从3开始读取,显然 “.” 是不符合整形的
scanf("%lf",&b);
//再次调用scanf函数进行读取,会从上一次遗留的字符开始读取
printf("%d %f",a,b);
return 0;
}
第一个scanf函数进行调用,首先从3开始向后读取,但显然“ . ”是不符合int整形数据的,故而读取将会在此停止。故a只会存放3。
第二个scanf函数,再次调用函数,函数的读取将会从上一个所遗留的字符开始读取即从“ . ”字符开始读取。故b中会存放0. 14159。
当然scanf函数是可以处理多个占位符的,故而上面的例子有可以写成这样
#include<stdio.h>
int main()
{
int a;
double b;
scanf("%d %lf",&a,&b);
printf("%d %f",a,b);
return 0;
}
2.scanf的返回指
scanf函数的返回值是一个整数,表示成功读取的变量个数。
成功读取几个,就返回几。如果没有读取到任何变量,则返回0。如果在成功读取到任何变量之前就发生错误或者到了文件末尾,则返回EOF(即:-1)
#include<stdio.h>
int main()
{
int a,b,c;
int x=scanf("%d %d %d",&a,&b,&c);
printf("%d",x);
//当我们输出3个值时,scanf成功读取3个数,返回值为3
return 0;
}
3.占位符
在scanf函数中的占位符我强调到两个(%c %s)。关于%c,是唯一一个不会忽略起手的空白字符,但是如果要强制忽略的话%c 前加上一个空格,表示跳过零个或多个空白字符,如下操作
scanf(" %c",&a);
关于%s,%s输出的并不是简简单单的字符串,%s是不会输出空白字符的,故意味着我们无法通过一个%s来输入多个单词等等。我们只能通过多个%s来实现