深刻理解scanf()

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);
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值