scanf()的作用
scanf()函数是C语言中用于从标准输入设备(通常是键盘)读取格式化数据的函数。
我有一问,何为格式化数据,是int?double?这些基础数据类型还是结构体?复数?不清楚对吧,不确定是吧?
何为格式化数据
//这是scnaf的定义
int scanf(const char *format, ...);
这个format是const类型的字符串,这个字符串规定了输入数据的格式,按照这个格式输入的数据就是格式化数据。
format的格式包含哪些
数据类型
输入数据需要与格式字符串中定义的类型相匹配,例如 %d 表示整数,%f 表示浮点数,%s 表示字符串等。
数据宽度
可以使用数字限制接收的字符数,例如 %10s 表示最多读取10个字符的字符串。
修饰符
可以指定数据的大小,如 %h 表示短整型,%l 表示长整型或双精度浮点型,%ll 表示长长整型等。
空白字符
格式字符串中的空格、制表符和换行符等空白字符,用于分隔输入的多个数据项。
非空白字符
格式字符串中的非空白字符(除了格式说明符以外),如逗号或冒号,必须在输入数据中出现,scanf() 才会继续读取数据。
输入顺序
输入的数据项必须按照格式字符串中定义的顺序出现。
理解空白字符
记住一句话,在非空白字符之间空白字符在计算机眼中就是不存在。
规范来说scanf()会跳过输入缓冲区中的空白字符(如空格、制表符、换行符等),直到遇到非空白字符为止。
何为缓冲区
缓冲区是我们程序运行之后的输入数据的区域吗?显然不是,他应该在内存中,是由程序开辟出来专门存储输入输出数据的区域,它有很多特点:
缓冲区内存管理
缓冲区是程序动态申请和释放的内存区域,可以根据需要调整大小。
减少I/O操作
通过使用缓冲区,程序可以减少对输入输出设备的直接操作次数,从而提高效率。例如,可以先将多次输入的数据存储在缓冲区,然后一次性读取或处理。
数据格式化
缓冲区可以用于数据的格式化处理,确保数据按照特定的格式进行存储和传输。
输入处理
在输入操作中,如使用 scanf() 函数时,输入的数据首先被存储在输入缓冲区中,然后程序按需从缓冲区中读取数据。
输出处理
在输出操作中,如使用 printf() 函数时,输出的数据首先被写入输出缓冲区,然后由系统在适当的时候发送到输出设备。
代码解释
有这么一道题,我该如何
#include<stdio.h>
int main(void)
{
int a;
float b;
//下面是两种输入格式,该怎么输入才能正确的给a和b赋值
//第一种
/*
scanf("i = %d,f = %f",&a,&b);
*/
//第二种
scanf("%d f = %f",&a,&b);
printf("a = %d,b = %f",a,b);
return 0;
}
看起来很夸张是吗?但是只要记住在非空白字符之间的空白字符在缓冲区就会被格式掉,你就知道该怎么输入了。
强调在非空白字符之间的空白字符
你可以自己试试这样的代码在控制台输入时与上面的有什么不同
scanf("%d , , f = %f , ",&a,&b);