欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 深刻理解scanf()

深刻理解scanf()

2025/3/26 7:40:02 来源:https://blog.csdn.net/qq_62893047/article/details/141168154  浏览:    关键词:深刻理解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);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词