17-printf()的用法提示
4.4.7 printf() 的用法提示
想把数据打印成列,指定固定字段宽度很有用。因为默认的字段宽度是待打印数字的宽度,如果同一列中打印的数字位数不同,那么下面的语句:
printf("%d %d %d\n", val1, val2, val3);
打印出来的数字可能参差不齐。例如,假设执行 3 次 printf() 语句,用户输入不同的变量,其输出可能是这样:
12 234 1222
4 5 23
22334 2322 10001
使用足够大的固定字段宽度可以让输出整齐美观。例如,若使用下面的语句:
printf("%9d %9d %9d\n", val1, val2, val3);
上面的输出将变成:
12 234 1222
4 5 23
22334 2322 10001
在两个转换说明中间插入一个空白字符,可以确保即使一个数字溢出了自己的字段,下一个数字也不会紧跟该数字一起输出(这样两个数字看起来像是一个数字)。这是因为格式字符串中的普通字符(包括空格)会被打印出来。
另一方面,如果要在文字中嵌入一个数字,通常指定一个小于或等于该数字宽度的字段会比较方便。这样,输出数字的宽度正合适,没有不必要的空白。例如,下面的语句:
printf("Count Beppo ran %.2f miles in 3 hours.\n", distance);
其输出如下:
Count Beppo ran 10.22 miles in 3 hours.
如果把转换说明改为 %10.2f ,则输出如下:
Count Beppo ran 10.22 miles in 3 hours.
本地化设置
美国和世界上的许多地区都使用一个点来分隔十进制值的整数部分和小数部分,如 3.14159 。然而,许多其他地区用逗号来分隔,如 3,14159 。读者可能注意到了, printf() 和 scanf() 都没有提供逗号的转换说明。 C 语言考虑了这种情况。本书附录 B 的参考资料 V 中介绍了 C 支持的本地化概念,因此 C 程序可以选择特定的本地化设置。例如,如果指定了荷兰语言环境, printf() 和 scanf() 在显示和读取浮点值时会使用本地惯例(在这种情况下,用逗号代替点分隔浮点值的整数部分和小数部分)。另外,一旦指定了环境,便可在代码的数字中使用逗号:
double pi = 3,14159; // 荷兰本地化设置
C标准有两个本地化设置: "C" 和 "" (空字符串)。默认情况下,程序使用 "C" 本地化设置,基本上符合美国的用法习惯。而 "" 本地化设置可以替换当前系统中使用的本地语言环境。原则上,这与 "C" 本地化设置相同。事实上,大部分操作系统(如 UNIX 、 Linux 和 Windows )都提供本地化设置选项列表,只不过它们提供的列表可能不同。