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则不会进行转换。
好了,今天就分享到这里,如果以后遇见新的用法楼主还会更新的,欢迎各位小伙伴来搬砖哦!
转载时请注明出处!转载时请注明出处!转载时请注明出处!……