当前位置: 代码迷 >> C语言 >> 继续请教--->关于printf()的输出问题
  详细解决方案

继续请教--->关于printf()的输出问题

热度:149   发布时间:2007-04-12 11:17:21.0
继续请教--->关于printf()的输出问题

#include <stdio.h>

main()
{
int i,j;
for(i=1,j=8;i<12;i+=2,j++)
printf("%*s",j,"***********\n"+(11-i));
getch();
}
这是输出金字塔的程序,crakerwang高手解释如下:


printf("%*s",n,"********"+(m))
n控制的是输出的宽度,m控制的是从左边数起的不显示的字符个数
比如printf("%*s",n,"abcdefgh"+(m))
那么输出的应该是10个宽度,不足的用空格表示,后面的*从左边数起有两个不显示所以输出应该是:
(4个空格)cdefgh


但我还是没有弄明白-->>
1、格式符中无*,而这里有,如何使用?..%*S
2、+又是如何使用来控制宽度的?教材上好像都没有说啊,晕了,再请来高手帮详细解释下此段程序,越详细越好,谢谢!

[此贴子已经被作者于2007-4-12 11:18:56编辑过]

搜索更多相关的解决方案: printf  金字塔  输出  

----------------解决方案--------------------------------------------------------

我在C语言总结中有说明,你去看看,第七点


----------------解决方案--------------------------------------------------------
以下是引用PcrazyC在2007-4-12 11:19:20的发言:

我在C语言总结中有说明,你去看看,第七点

7.printf("%*s\n",M,"字符串"+N)的用法说明

先看N的值,去掉字符串的左边N个字符,再看字符串的位数与M的值的大小
1.若字符串的位数比M大,然后输出
2.若字符串的位数比M小,就先在M的左边补空格,使字符串的长度等于M,然后输出
printf("%-*s\n",M,"字符串"+N),
先看N的值,去掉字符串的左边N个字符,再看字符串的位数与M的值的大小
1.若字符串的位数比M大,然后输出
2.若字符串的位数比M小,就先在M的右边补空格,使字符串的长度等于M,然后输出

这个在哪本教材上有啊?


----------------解决方案--------------------------------------------------------

我也不知道,我自己调试出来的,听别人说好像在C Primer Plus上有,我没买那本书,我只有谭浩强的书,所以不知道有没有


----------------解决方案--------------------------------------------------------
以下是引用冰天雪在2007-4-12 11:23:09的发言:

7.printf("%*s\n",M,"字符串"+N)的用法说明

先看N的值,去掉字符串的左边N个字符,再看字符串的位数与M的值的大小
1.若字符串的位数比M大,然后输出
2.若字符串的位数比M小,就先在M的左边补空格,使字符串的长度等于M,然后输出
printf("%-*s\n",M,"字符串"+N),
先看N的值,去掉字符串的左边N个字符,再看字符串的位数与M的值的大小
1.若字符串的位数比M大,然后输出
2.若字符串的位数比M小,就先在M的右边补空格,使字符串的长度等于M,然后输出

这个在哪本教材上有啊?

老谭《C程序设计》
----------------解决方案--------------------------------------------------------
这本书上有,我都快翻穿了
----------------解决方案--------------------------------------------------------

以下是引用PcrazyC在2007-4-12 11:28:56的发言:

我也不知道,我自己调试出来的,听别人说好像在C Primer Plus上有,我没买那本书,我只有谭浩强的书,所以不知道有没有


[此贴子已经被作者于2007-4-12 11:43:18编辑过]


----------------解决方案--------------------------------------------------------
以下是引用福尔摩斯在2007-4-12 11:30:13的发言:

老谭《C程序设计》

我也翻了底朝天,也没有看到老谭在哪写到?
不过看了C Primer Plus可以理解到:*在%*S中的作用就是可以当变量使用 控制宽度及精度

而字符串的控制上("**********"+N)它对应的整个字符串S,那 这里的N又如何控制呢?又查不到了,晕~~


----------------解决方案--------------------------------------------------------

N就当字符数组下标塞...


----------------解决方案--------------------------------------------------------
以下是引用I喜欢c在2007-4-12 12:44:05的发言:

N就当字符数组下标塞...

问题是:去掉字符串左边的N个字符~

这个不会是Printf 的高级运用吧?


----------------解决方案--------------------------------------------------------

  相关解决方案