通常,当我们这样做:在printf(“%。* f”,a,b)中,如果'a'为负值,结果如何?
printf (" %.*f ", 2, 3.3);
精度宽度被设置为2个,并输出3.30。但是如果宽度被赋予负值,例如
printf (" %.*f ", -2, 3.3);
输出是3.300000这意味着正在使用默认宽度。那么究竟是什么在这里做-2?
通常,当我们这样做:在printf(“%。* f”,a,b)中,如果'a'为负值,结果如何?
printf (" %.*f ", 2, 3.3);
精度宽度被设置为2个,并输出3.30。但是如果宽度被赋予负值,例如
printf (" %.*f ", -2, 3.3);
输出是3.300000这意味着正在使用默认宽度。那么究竟是什么在这里做-2?
晚C11标准草案说(7.21.6.1):
负精度参数取为如果精度被删去。
(是的,这是为fprintf
,这也是printf
说什么的草案(7.21.6.3):)
printf函数等同于与fprintf中的参数标准输出前插入 参数printf。
如果省略精度,则采用负的精度。
来源:C99 7.19.6.1(在http://port70.net/~nsz/c/c99/n1256.html#7.19.6.1 HTML版)
或者从POSIX(更易读):http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
根据[此](http://en.cppreference.com/ w/cpp/io/c/fprintf),它被忽略:*如果这个参数的值是负数,它会被忽略。* – chris 2012-08-15 14:47:27
Huh。我从http://linux.die.net/man/3/printf – 2012-08-15 14:49:47
Welp,http://www.manpagez.com/man/3/printf/得到了一些完全不同的东西,它也说它被忽略了。 – 2012-08-15 14:51:21