C 使用变量设置浮动宽度和精度

C 使用变量设置浮动宽度和精度,c,printf,width,precision,C,Printf,Width,Precision,我正在尝试以用户可更改的宽度和精度打印浮点数。我遇到的问题是,只有精度字段被读取,宽度被完全忽略 int width = 4; int precision = 12; printf("%*.*lf ", width , precision, value); 605.32364879299 5980.79287087619 802.32966093936 5839.78856776635 5355.77379680776 6602.20148319956 应该有一个空格填充,以确保小数对齐,但

我正在尝试以用户可更改的宽度和精度打印浮点数。我遇到的问题是,只有精度字段被读取,宽度被完全忽略

int width = 4; int precision = 12;
printf("%*.*lf ", width , precision, value);

605.32364879299 5980.79287087619 802.32966093936
5839.78856776635 5355.77379680776 6602.20148319956
应该有一个空格填充,以确保小数对齐,但就好像宽度变量甚至没有被读取一样

宽度被完全忽略了

当然是对场地宽度的错误理解。它是打印字符的最小计数,包括符号、数字、小数点等

可选的最小字段宽度。如果转换后的值的字符数少于字段宽度,则会用空格填充。。。C11dr§7.21.6.1 4

输出

605.323648792990       // Minimum width =  4, 16 characters in numeric text
     605.323648792990  // Minimum width = 21, 5 spaces + 16 characters in numeric text

“宽度”是整个文本的最小文本宽度。“6602.20148319956”有17个字符,即超过4个字符,因此打印了17个字符。小数点后12位,宽度为4就相当于说“我不在乎输出有多宽”。您需要指定至少17的宽度,以查看示例数据的任何好处。再次阅读(POSIX)的规范。
605.323648792990       // Minimum width =  4, 16 characters in numeric text
     605.323648792990  // Minimum width = 21, 5 spaces + 16 characters in numeric text