书接上回,咱们继续学习scanf()的基本用法
二、C语言数据类型与变量(scanf和printf (1))
二、C语言数据类型与变量(scanf和printf (2))
二、C语言数据类型与变量(scanf和printf (4)完)
C语言学习网站https://www.nowcoder.com/exam/oj?page=1&tab=%E8%AF%AD%E6%B3%95%E7%AF%87&topicId=290
牛客网基础题练习https://www.nowcoder.com/exam/oj?page=1&tab=%E8%AF%AD%E6%B3%95%E7%AF%87&topicId=290
1.scanf( )的基本用法
scanf( ) 函数用于读取用户键盘输入,程序运行到这个语句时,会停下来,等待用户从键盘输⼊。
用户输⼊数据、按下Enter后, scanf( ) 就会处理⽤⼾的输⼊,将其存⼊变量
定义在头⽂件 stdio.h 中,sacnf 需要一个取地址符。
scanf也可以一次取多个。
1 scanf("%d", &i);
2 scanf("%d%d%d%d",&i,&a,&b,&c);
2.scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符
#include<stdio.h>
int main()
{
char arr[5] = { 0 };//初始化数组,数组只有五个元素
scanf("%s", arr);//数组名本来就是地址,无需取地址
printf("%s\n", arr);
return 0;
}
int main()
{
int i = 0;
int a = 0;
int b = 0;
double c = 100.1;
scanf("%d%d%d%lf", &i, &a, &b, &c);
printf("%d %d %d %lf\n", i, a, b, c);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/0602efbea8466ea2e5d50f94f8d86be8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1be57b2d2808d4aa79c834bb15bff1bd.png)
3. scanf( )的读取机制
scanf( )函数通过按顺序解析与占位符相匹配的用户输入来工作,而这些输入是先存放在缓存中的。用户每次按下回车键,scanf( ) 就会从缓存中按照占位符解析输入,直到遇到不符合格式要求的字符。
1)当用户在终端输入信息并按下回车键时,这些输入首先被存放在缓存(缓冲区)中。
2)当用户按下回车键后,scanf()开始根据提供的格式字符串(占位符)来解析缓存中的内容。
3)逐个占位符解析:如果用户的输入被分成多行进行,scanf() 将按顺序逐个匹配占位符。在第一次按下回车键后,如果第一行输入匹配了第一个占位符,那么下一次按回车时,scanf()将从第二个占位符开始解析输入。
4) 连续读取机制:scanf() 从上一次解析结束的地方(即上次读取遗留的第一个字符)开始继续读取。它会继续解读缓存中的内容,直到读完所有缓存的内容,或者遇到第一个不符合当前占位符格式要求的字符为止。
比如下面这个例子:
int main()
{
int b = 0;
double c = 100.1;
scanf("%d%lf",&b, &c);//用户输入-7.894
printf("%d %lf\n",b, c);
return 0;
}
4. scanf( )的返回值
int main()
{
int i = 0;
int a = 0;
int b = 0;
double c = 100.1;
int r = scanf("%d%d%d%lf", &i, &a, &b, &c);
printf("i=%d ,a=%d ,b= %d ,c= %lf\n", i, a, b, c);
printf("r=%d", r);
return 0;
}
1)正常四个值都输入正确
2)输⼊2个数后,按 ctrl+z ,提前结束输入
没结束就多按几次
3)⼀个数字都不输入,返回EOF,也就是-1
直接按3次 ctrl+z ,输出的r是-1