试图理解printf中格式说明符的奇怪行为

时间:2014-12-22 06:51:10

标签: c visual-studio-2010 visual-c++

我看到,随着我不断增加格式说明符" 10s"至" 100s" " 1000"我得到了继续在屏幕上移动的输出

main()
{
char s[]="Hello,,world";
printf("%10s",s);
}

输出

10s

Hello,,worldPress any key to continue . . .

100s

      Hello,,worldPress any key to continue . . .

1000s

                        Hello,,worldPress any key to continue . . .

发生了什么事?

3 个答案:

答案 0 :(得分:2)

使用printf("%10s",s);时的

10s将离开弦前的前导空格。你的字符串有12个字符,如果你给10s,则sting的长度大于整数,所以没有空格。

如果整数值大于字符串,则它将离开空格。 在给出100s时,sting的长度小于整数,因此它留下了空白。

答案 1 :(得分:2)

在printf中,以scpecifier格式赋予值,在打印输出之前充当前导空格。将采用数组值的计数。

在第一种情况下,

Total array count is 12. You gave 10. So there is no leading spaces.

在第二和第三种情况下,

You gave 100, SO 100-12=88 spaces and 1000-12=988 spaces is given as a  output. 

只有控制字符串中的数字才会为您提供前导空格。

答案 2 :(得分:1)

语句printf("%ns",s);打印字符串s,但宽度为%nd,表示我们希望为输出保留n个字符(位置)。结果是在打印角色之前放置了n个空格字符。