C语言中用%输出不同内容

C语言有很多输出函数,也有很多输出方式,但最基础的还是printf()函数,但我们不止能输出想要的内容还能指定输出的方式,下面我就对此总结一下,本人也是初学者,以下内容可能不全,但绝对是原创,勿喷。

一般情况下直接用“%d”输出整数时,正数不输出符号,而负数输出符号。如果变量或常量为带符号类型且要总是输出符号,就可以这样写“%+d”,如:

int num0 = 5;
int num1 = 7;
int num2 = 9;

printf("%d%+d%+d=%d",num0,num1,num2,num0+num1+num2);
return 0;

这里写图片描述
把第二个和第三个数总数输出符号就可以用其符号来表示是加还是减。当然,这个也可以用于输出浮点类型数的输出“%+f”。

如果变量或常量是浮点类型那么每一次输出小数点后面都要输出一大堆0,用%.2f就可以指定输出小数点后三两位,当然,也可以指定4位,完全随你。
前:
这里写图片描述
后:
这里写图片描述

如果一次性要输出很多数,如直接用“%d%d%d”来输出1,2,3肯定是不明智的,因为结果变成了
这里写图片描述
这不好区分每个数,有人说我可以用制表符或者换行符,这章不讨论制表符,如果是好几百个数用换行符也不好看。不如这样“%5d%5d%5d%5d",结果变成了
这里写图片描述
在中间加个数可以指定数字占用的宽度,这里就制定了宽度为5,有四个空格。不过默认数字是右对齐,可以把它变成这样实现左对齐“%-5d”
这里写图片描述
不过要注意指定的宽度要不能小于数字长度哦,不然就没用了。

类似的标识符还有这些:

标志意义
-结果左对齐,右边填空格
+输出符号(正号或负号)
空格输出值为正时冠以空格,为负时冠以负号
#对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才会给出小数点

2018/8/24 继续

不同格式的数据要用不同的格式指定符来读取

类型格式指定符
short%hd
int%d
long%ld
float%f或%e
double%lf或%le

类似的格式字符还有这些:

格式字符意义
d以十进制形式输出带符号整数(正数不输出符号)
i(老式写法,和%d无区别)以十进制形式输出带符号整数(正数不输出符号)
o以八进制形式输出无符号整数(不输出前缀0)
x,X以十六进制形式输出无符号整数(不输出前缀0x)
u以十进制形式输出无符号整数
f以小数形式输出单,双精度实数
e,E以指数形式输出单,双精度实数
g,G以%f或%e中较短的输出单,双精度实数
c输出单个字符
s输出字符串

不过printf函数还有一些比较特殊的地方。那就是输出表列的求值顺序。不同的编译系统其求值顺序不一定相同

/*测试当前编译系统求值顺序*/
#include <stdio.h>
int main(void)
{
	int i = 5;
	printf("%d %d", i, ++i);	
	return 0;
}

运行以上代码,如果结果是5 6就说明是从左到右,如果是从6 6就说明是从右到左。
这里写图片描述
楼主的VS编译系统就是从右到左的,虽然运算顺序是从右到左,但输出顺序还是从左到右的,所以会得到以上输出。

所以如果遇到类似这样的运算最好是把运算隔离成几个printf函数,像这样:

#include <stdio.h>
int main(void)
{
	int i = 5;
	printf("%d ", i);	
	printf("%d",++i);
	return 0;
}

就不容易出错了,否则这样的错误还真不好找出来。。


2019/05/28:
今天看网课时突然发现有的老师写了 printf("%i", a); 之类的……不明白%i是什么,查了下才知道。

%i 是老式写法。它们都是有符号整型格式。

但%i用在 scanf() 函数里可以自动将输入的八进制(或者十六进制)转换为十进制,而%d则不会进行转换。


好了,今天就分享到这里,如果以后遇见新的用法楼主还会更新的,欢迎各位小伙伴来搬砖哦!

转载时请注明出处!转载时请注明出处!转载时请注明出处!……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值