C语言(输出scanf()函数)

本文介绍了scanf函数如何将输入转换为整数、浮点数等,并讨论了它的输入原理、返回值机制。同时,文章讲解了转换说明和修饰符的应用,包括%d,%f,%s等占位符,以及如何处理输入错误和跳过指定项。此外,还提到了普通字符串在格式字符串中的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创作内容不易,学习的朋友麻烦关注下博主,后面学习不迷路。有不会的问题也可以论坛咨询博主,博主也会及时回复~~

一.概念带入

scanf()把输入的字符串转换成整数,浮点数,字符或字符串。而printf()正好与其相反,把整数,浮点数,字符和字符串转换成显示在屏幕上的文本。所以scanf()在使用上面会和printf有很多一样的地方,不管是占位符还是修饰符都是一样的

这里要说明下scanf()是把输入值送到变量的内存地址上,而如果要读取基本变量类型,需要在变量名加上一个&来获取变量的地址值,而字符数组比较特别,字符数组本身就可以代表地址值,带小标就需要使用&来获取变量的地址值。

二.scanf()输入原理和返回值

scanf()函数每次读取一个字符,跳过所有的空白字符,直至遇到第一个非空白字符才开始读取。

scanf()函数放回成功读取的项目

scanf()会返回成功读取的项数。如果输入一个错误类型值则会返回0

这里教大家一个小技巧,在printf("scanf返回值为: %d\n", scanf("%d %d", &a,&b));这条语句中,scanf("%d %d", &a,&b)会先执行,然后返回值会给到%d占位符。

这里b输入了一个不匹配的占位符数据,所以scanf返回值为1

三.scanf()转换说明

1.转换说明

%a

浮点数十六进制P记数法

%c

单个字符

%d

有符号十进制数

%i

有符号十进制整数(与%d相同)

%e

浮点数,e记数法

%f

浮点数,十进制记数法

%g

根据值的不同,自动选择%f,%e

%o

无符号八进制整数

%p

指针

%s

字符串

%u

无符号十进制整数

%x

无符号十六进制整数

2.修饰符

0

对于数值,用前导0代替空格填充字段宽度。如果已经出现-标记,则忽略0标记

h

基本使用%hd,就是short的占位符

j

表示intmax_t或uintmax_t类型的值。而这些值就定义在stdint.h中。而intmax_t就算long long数据类型别名,uintmax_t就算unsigned long long 的别名,用lld和llud都可以。

ll

lld表示long long int

t

表示ptrdiff_t类型的值。Ptrdiff_t是两个指针差值的类型

z

表示size_t类型的值。就算sizeof和strlen类型的返回值。

数字

最大字段宽度,输入达到最大字段宽度处,或第一次遇到空白字符时停止

scanf()的使用和printf基本一样,只不过printf是输出,scanf是输入数据输入数据,唯一的不同就在数字,printf是最小字段宽度,而scanf是最大字段类型,这个我们单独演示下,其他的大家看上一章的printf就可以了

ch只有10char类型大小。所以我们用%9s控制输入到数组大小(最后一个位置要给\0);

如果你不加,则会溢出,报错

3.*:抑制赋值

*主要用于省略这个占位符

这里可以看见我输入了三个数字,567,879,123但只输入了123,这就是*的作用,它会是scanf()跳过相应的输入项。这里因为我还用了%2d,所以123,最多输入到2就会停止

四.格式字符串中的普通字符串

Scanf()允许把普通字符放在格式字符串中。,比如添加一个逗号、

scanf("%d,%d", &a, &b),因为%d和%d之间有一个, 所以我们在输入的时候也要遵循这个样式。

如果不遵循就会输入错误

五.scanf()读取错误类型值

我们先来看例子

在这个例子中,系统输入要求我们输入一个整数,但很不巧,我们输入错误了,输入成字符'q’了。这种情况下,a还是存储着一个垃圾值。但仔细看程序你会发现我后面还有一个

scanf("c",&b)给字符b的赋值,但在实际运行中,我们好像没看到,但最后b的值尽然就为q了。

这主要是因为,scanf()读取失败的的时候,会把无法读取的输入留在输入队列中,供下次读取。这也是为啥b的值自动就读取q的原因了


好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小天才哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值