C中的printf函数和scanf函数

printf函数

在C中是用于输出的函数,可以输出语句、常量、变量。

printf("I have two books");//语句
printf("I have 2 books");//常量

如果是变量比较特殊,如果直接在上面的语句中将two或者是2改为变量名称肯定是不行的。

printf("I have %d books",book_number);//这里面book_number为一个变量。

这样,我们就实现了输出一个int型变量。
如果是其他的呢?下面给出一些常用的**(区分大小写!)**

  • %c //一个char型变量
  • %s //一个char数组,直到\0结束
  • %d //一个int 型变量
  • %f //一个float型变量
  • %p //一个指针的地址

关于地址的我这里有一个小例子:(可以看出%p的输出其实是16进制的地址,而用int型则是10进制的地址)
在这里插入图片描述
拓展
都知道有8进制和16进制,而且对float型还有e计数法,int型还有很多兄弟

  • %e/E E计数法,e和E决定输出的大小写
  • %i 同%d
  • %u unsigned int
  • %o unsigned int 按八进制输出(上面默认十进制)
  • %x/X unsigned int 按十六进制输出(对英文字母的大小写看x还是X)
  • %% 这个就是输出一个%,因为如果是只有一个%,编译器会认为是漏掉了后面的转换字符

int型和float型当然不止上面这些,所以人们又给出了如下的修饰符

  • h (short)
  • hh (char)
  • l (long)
  • ll (long long)
  • L (long double)

前四个针对的都是int和unsigned int型,比如"%hd"是short int型,"%hu"是unsign short int型
修饰符在%和d或者u中间
最后一个针对的是float型

可能第二个的char不太好理解,都是int型哪来的char? 其实在测试中输出结果都是int型,但是结果的类型是有所不同的。

在这里插入图片描述

另外强调一点,在输出的时候,float 型会自动转换为double 型,所以没有和float型相关的修饰符。

还有一些特殊的变量修饰符,自己也没见过,就先列出来。

  • intmax_t和uintmax_t用j;
  • ptrdiff_t类型(两个指针的差值)用t;
  • size_t用z,是sizeof是返回类型

对齐

这个可是强迫症福利,我们都知道有时候的输出要对齐,所以有如下方法。
分为三部分:标记、数字、‘·’

数字和点(用于限定输出位数,默认为从右开始)
在%和字母之间,如%5.3f 表示输出浮点数长度为5,小数点后有三位。还有%10.2LE
但对于int型,%5.3d输出6则为" 006”,前面有两个空格占位,3表示显示的位数。

注意如果长度不够,编译器会自动扩大长度

这里面有两个数字,是都可以省略的,省略第一个数字代表不限制长度;省略第二个数字同.0,也就是只取整数部分。

标记(可以多个同时使用)
‘-’ ‘+’ ’ ’ ‘#’ ‘0’ 即加减 空格 井号和0
减号对应的是对齐方向,负为从左开始
在这里插入图片描述
加号和空格是针对正负问题,加号是正数显示加号,负数显示减号;
空格是正数显示空格,负数显示负号
在这里插入图片描述
#是显示输出的进制,如%#8.0o,则输出八进制的同时在前面标识出0(0为八进制的标识)
0则是将空格替换为0:
在这里插入图片描述
对于int型,如果有负号或指定精度,则该符号无效。

printf函数的返回值:打印的字符个数

scanf函数

常用的读入函数,可以从文件或者键盘输入中读入。

int number;
scanf("%d",&number);

注意取地址符&的存在即可,但是对于读入一个char数组则不需要,因为数组名即为地址。

和printf函数相同,我们可以采取一次读入两个

scanf("%d %d",&a,&b);//中间用空格隔开

scanf也有相同的转换方式和修饰符,至于返回值,如果成功就是读入的变量个数,失败返回EOF
EOF这个我查了一下,在stdio中被define为-1,所以可以通过检测返回值是不是-1来判断是否读入失败

‘*’修饰符

这个在printf和scanf函数中都i有

printf
在这个函数中,我们有时候不确定输出长度为多少合适,但是如果不给出,程序又不能运行,所以人们想出了一个办法,就是用*占位。

printf("%*.*f",a,b,c);

此时输出的为c,而其长度为a,小数点后保留b位。

scanf

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

然后我们输入:1 2 3,这时1和2都被舍弃,读入的c为3.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值