1. 关于c语言printf()函数格式说明的问题
对于浮点输出格式来说
%m.nf
其中m是输出宽度,n是精度,f是格式化控制符
m指定的是输出数字字符串的最小长度,比如你输出
printf( "%2.3f" , 123.456 ); // 由于实际输出的数字123.456共有7个字符,大于2个字符数量,所以这里的2其实实际上没起到什么作用,不过如果你printf( "%8.3f" , 123.456 );,8-7=1,那么结果将在数字前面补一个空格字符,使用printf( "%08.3f" , 123.456 );则是补一个字符'0'
所以e如果存在于被输出的数字串里的话(比如使用%e),它也是要占用m的计数的,包括小数点。
n则是指定输出精度,也就是小数点后保留几位,默认不指定.n的时候printf会自动调整输出到默认精确位,如果指定了n的话,printf则把数字保留小数点后n位输出。
所以printf( "%f", 123.456 );如果输出123.456000的话,那么printf( "%.2f", 123.456 );则输出123.46,
2. C语言printf的格式问题
除了小数点要占据一列,负号也要占据一列的啊!
对于float类型,不论%nf这里的n是几,只要不是n.m之类的,都按默认输出(也就是保留6位小数)
float只能接收7位有效数字,后面都是无效的填充数字
应该也不是随机的,但这个深入追究下去,意义不大
3. 萌新关于C语言printf函数地一些问题
printf是一个可变参数的函数,所谓可变参数,就是参数个数类型都可以不固定
那么这种类型的函数,是如何获取它的参数呢?
在C中,对函数的参数有约定,它们在内存中按参数声明的顺序升序排列,因此能取得第一个参数,就能取得所有的参数。
那么,又是如何知道要取得多少个参数的?
一般的做法是在第一个参数中体现,比如printf,第一个参数里格式化串的个数(即%+格式化字符串的组合有多少个),就代表了后面还有多少个参数,你的问题中,两个%d说明有两个参数。
那为什么又能输出5,这是因为按顺序从第一个参数"%d,%d\n"开始算,第三个参数的地址刚好和变量g的地址是重合的。
4. 有关C语言printf输出问题
这是要输出-36这个数字。
%d是按整型输出,
-8.4中,8表示输出的数字占8个位置,0.4表示的是输出的数字显示4位数,负号表示左对齐。
所以输出的应该是:"-0036 ”
负号、0036、三个空格,共8个位置,数字显示4个位,不足的补0,左对齐,所以右边空几个位置。
以上信息希望对你有帮助。。^^
5. C语言 printf 占位符问题
printf("7.2%f",x);占7位,保留两位小数
6. C语言中printf的问题
这与编译器处理前++的过程顺序有关。对于有的编译器来说,第二种情况输出就是124,123。而有的编译器是先把前++全都做完,再从后向前做计算夺栈操作(输出124,124的编译器就是这一种)就得出124,124了。由于C没有具体规定具体处理顺序,编译器开发商用以上两种办法都是不违规的。
7. c语言wsprintf和printf的问题
你所创建的工程是否是UNICODE工程?
我看你使用atof转换,说明转换之前的字符串是ANSI字符串,wsprintf是自适应的函数,它在非UNICODE环境下,会把字符串转换成ANSI字符串,而在UNICODE环境下会把字符串转换成UNICODE字符串,肯定会不相等了。
8. linux 后台程序中printf占资源吗 printf函数怎么执行的
linux 后台程序中printf占资源,printf函数在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向终端(显示器、控制台等)输出字符。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
9. 一个奇怪的C语言问题,涉及到指针、数组、堆栈、以及printf,希望C语言大神们帮帮忙。
刚才我也没想明白,看到了dripple11的回答,再去想了一下,现在想明白了。他的回答是正确的。
又回头看了一下,发现,lz没有完全搞懂。
顺便鄙视一下whatplay的回答,是个傻X。
printf函数,正如第一个人所说,调用函数printf前先要将形参压栈,这时候要计算*p
所以,第一条printf语句已经把参数算出来并放到栈顶保存了。然后调用printf函数(函数调用需要用到栈建立访问连和控制链,而,原来的函数f执行完了,原本f是在栈顶的,所以,函数f的栈空间释放。数组空间也被释放),printf占用了栈,所以,把原来函数f的栈空间内容修改了。所以,第一条printf语句是可以得到结果的。后面因为arr空间的内容已经被修改,所以,之后的printf语句都得不到结果。
顺便再解释一下printf("%s\n",p);得到的为什么是乱码。
正如上面所说,先计算参数p的值保存栈顶。保存的值为arr的地址。然后调用printf函数,把栈顶空间内容修改了。虽然保存了地址,但是原来的内容已经修改了,所以得不到结果。
whataplay,我只是鄙视你的回答,没有骂你。因为你的回答是答非所问!
10. 关于C语言printf()函数格式说明的问题
对于浮点输出格式来说
%m.nf
其中m是输出宽度,n是精度,f是格式化控制符
m指定的是输出数字字符串的
最小长度
,比如你输出
printf(
"%2.3f"
,
123.456
);
//
由于实际输出的数字123.456
共有7个字符,大于2个字符数量
,所以这里的2其实实际上没起到什么作用,不过如果你printf(
"%8.3f"
,
123.456
);,8-7=1,那么结果将在数字前面
补一个空格字符
,使用printf(
"%08.3f"
,
123.456
);则是补一个字符'0'
所以e如果存在于被输出的数字串里的话(比如使用%e),它也是要占用m的计数的,包括小数点。
n则是指定
输出精度
,也就是
小数点后保留几位
,默认不指定.n的时候printf会自动调整输出到默认精确位,如果指定了n的话,printf则把数字保留小数点后n位输出。
所以printf(
"%f",
123.456
);如果输出123.456000的话,那么printf(
"%.2f",
123.456
);则输出123.46,