二、C语言数据类型与变量(scanf和printf (3))

书接上回,咱们继续学习scanf()的基本用法

二、C语言数据类型与变量(scanf和printf (1))

二、C语言数据类型与变量(scanf和printf (2))

二、C语言数据类型与变量(scanf和printf (4)完)
C语言学习网站icon-default.png?t=N7T8https://www.nowcoder.com/exam/oj?page=1&tab=%E8%AF%AD%E6%B3%95%E7%AF%87&topicId=290
牛客网基础题练习icon-default.png?t=N7T8https://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() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符

所以不管用户怎样输入数据,分成几行还是在同一行,只要按下回车键,scanf就开始读取这个输入
#include
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;
}

二、C语言数据类型与变量(scanf和printf (3))_第1张图片
二、C语言数据类型与变量(scanf和printf (3))_第2张图片

3. scanf( )的读取机制

scanf( )函数通过按顺序解析与占位符相匹配的用户输入来工作,而这些输入是先存放在缓存中的。用户每次按下回车键,scanf( ) 就会从缓存中按照占位符解析输入,直到遇到不符合格式要求的字符。

1)当用户在终端输入信息并按下回车键时,这些输入首先被存放在缓存(缓冲区)中。


2)当用户按下回车键后,scanf()开始根据提供的格式字符串(占位符)来解析缓存中的内容。

3)逐个占位符解析:如果用户的输入被分成多行进行,scanf() 将按顺序逐个匹配占位符。在第一次按下回车键后,如果第一行输入匹配了第一个占位符,那么下一次按回车时,scanf()将从第二个占位符开始解析输入。

4) 连续读取机制:scanf() 从上一次解析结束的地方(即上次读取遗留的第一个字符)开始继续读取。它会继续解读缓存中的内容,直到读完所有缓存的内容,或者遇到第一个不符合当前占位符格式要求的字符为止。

比如下面这个例子:

  scanf() 读取用户输入时, %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读
取到 -7 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -7
第⼆次调⽤ scanf() 时,就会从上⼀次停止解读的地方,继续往下读取。这⼀次读取的⾸字符
. ,由于对应的占位符是 %lf ,会读取到 .894
int main()
{

	int b = 0;
	double c = 100.1;
	scanf("%d%lf",&b, &c);//用户输入-7.894
	printf("%d %lf\n",b, c);
	return 0;
}

二、C语言数据类型与变量(scanf和printf (3))_第3张图片

4. scanf( )的返回值

scanf( ) 的返回值是⼀个整数,表⽰成功读取的变量个数。 如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或 者遇到读取到⽂件结尾,则返回常量 EOF。
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)正常四个值都输入正确

二、C语言数据类型与变量(scanf和printf (3))_第4张图片

2)输⼊2个数后,按 ctrl+z ,提前结束输入

没结束就多按几次

二、C语言数据类型与变量(scanf和printf (3))_第5张图片

3)⼀个数字都不输入,返回EOF,也就是-1

直接按3次 ctrl+z ,输出的r是-1

二、C语言数据类型与变量(scanf和printf (3))_第6张图片

你可能感兴趣的:(C语言学习,c语言,开发语言)