C语言scanf()和printf()函数

scanf()函数和printf()函数是输入/输出函数,也成为I/O函数,两者工作原理相同,都使用格式字符串参数列表

scanf()输入函数

scanf()函数把输入转换成整数、浮点数、字符或者字符串,例如

scanf(%d %f", &x, &y);

其中,百分号%开头的符号称为转换说明%d表示整型数据,%f表示浮点型数据。上述代码意思是输入整数x和浮点数y。转换说明的个数需要与变量的个数相同,否则会出现未知错误。

注意,在读取基本变量类型时,要在变量名前加上&;如果读取的是字符数组,则不要加&&是地址运算符,表示变量存储的地址。

使用的转换说明如下表

转换说明把变量解释为
%c字符
%d%i有符号十进制整数
%e%E%f%F%g%G%a%A浮点数
%o有符号八进制整数
%p指针(地址)
%s字符串
%u无符号十进制整数
%x%X有符号十六进制数

在上述转换说明中,百分号%和字母之间可以使用修饰符,如下表

修饰符含义
*抑制赋值
数字最大字段宽度。达到最大宽度或遇到空白字符则停止读取
hh把整数作为signed charunsigned char类型读取
ll把整数作为long longunsigned long long类型读取
hlL%hd%hi存储为short int类型;
%ho%hx%hu存储为unsigned short int类型;
%ld%li存储为long类型;
%lo%lx%lu存储为unsigned long类型;
%le%lf%lg存储为double类型;
%Le%Lx%Lu存储为long double类型
j与整型转换说明一起使用,表示使用intmax_tuintmax_t类型
z在整型转换说明一起使用,表示使用sizeof的返回类型size_t
t与整型转换说明一起使用,表示两个指针差值类型ptrdiff_t

其中,intmax_tuintmax_t类型定义在stdint.h的头文件中。

*修饰符抑制赋值表示跳过相应的项,例如

scanf("%*d %*d %d", &a);

表示跳过前两个整数读取,把输入的第3个整数赋值给a

scanf()函数中,如果出现空格字符外的普通字符,则在输入时要严格匹配,例如

scanf("%d,%d", &x, &y);

必须输入一个数字,一个逗号,再一个数字,如果逗号和数字中间有空格的话也没有关系,scanf()函数会跳过空格。实际上,除了%c,其它的转换说明都能跳过空格,而%c会读取空格,因此要特别注意%c的情况。

scanf()作为一个函数,它也有返回值,返回的是成功读取的项数。如果没有成功读取任何项,则返回0。当读取到文件尾时,返回EOF

printf()输出函数

printf()函数与scanf()函数正好相反,同样需要转换说明与变量项匹配,例如

int x = 2;
printf("%d%", x);

表示输出整型变量x。转换说明如下表

转换说明含义
%a%Ap记数法表示的十六进制浮点数
%c单个字符
%d%i有符号十进制数
%e%Ee记数法表示的浮点数
%f十进制浮点数
%g%G自动选择%f%e%E%e%E格式用于指数小于-4或者大于等于精度时
%o无符号八进制数
%p指针
%s字符串
%u无符号十进制整数
%x%X无符号十六进制数,使用0f0F

如果要输出单个百分号%,则需要连续写两个百分号%%
float类型会转化为double类型输出。

待打印的项也可以是表达式。但是,格式字符串中转换说明要与待打印的项相匹配,否则就会得到无意义的结果。

在百分号%和字符之间插入其它字符可以修饰上述的转换说明,常见的修饰符如下表

修饰符含义
h与整型转换说明一起使用,表示short intunsigned short int类型
hh与整型转换说明一起使用,表示signed charunsigned char类型
j与整型转化说明一起使用,表示intmax_tuintmax_t类型
l与整型转化说明一起使用,表示long intunsigned long int类型
ll与整型转换说明一起使用,表示long long intunsigned long long int类型
L与浮点转化说明一起使用,表示long double类型
t与整型转换说明一起使用,表示ptrdiff_t类型
z与整型转换类型一起使用,表示size_t类型

这些修饰符还可以是数字。如果是一个整数,则表示最小字宽度,比如%4d,表示占用4位的整数。如果实际宽度超过限定值,系统会自动使用更宽的字段。

如果是小数点.加数字的形式,则表示精度,例如%.2f,表示以四舍五入保留两位小数;如果用%e%E转换,也表示保留小数点后的位数;如果用%g%G转换,表示有效数字最大位数;如果用%s转换,表示字符的最大数量;如果是整数,表示数字的最小位数。

上述两种方式可以结合使用,如%4.2f,表示占用4个宽度,小数点后保留2位。

在转换说明中,也可在%后加上标记

标记含义
-待打印项左对齐
+显示打印有符号数字的符号。如果是整数,显示加号+;若为负数,显示减号-
空格若是有符号的负数,则显示减号-;若是有符号正数,显示加号+
#转换成另一种格式。以八进制输,数字出前会显示0;以十六进制输出数字前会显示0x0X
00填充空格。如果出现减号-,则忽略

printf()函数也有*修饰符,可在参数列表中指定字段宽度,例如

int width = 5;
int precision = 2;
float x = 2.2;
printf("%*.*f", width, precision, x);

widthprecision的值会替代转换说明里的*

最后,printf()函数也有返回值,它返回打印字符的个数。如果输出错误,则返回负值。

字符串输入和输出

字符串除了可使用scanf()printf()函数外,还有专门的输入和输出函数,详细可戳此链接

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值