在网上看到的,贴过来记录一下

http://www.cppleyuan.com/viewthread.php?tid=9428

一个有趣的打印菱形的程序

 1 #include <stdio.h>
 2 
 3 int line = 1;
 4 int main()
 5 {
 6         printf("%*s\n",
 7                 7-(line>4? line-4: 4-line),
 8                 "*******"+2*(line>4? line-4:4-line)
 9         );
10         if(++line != 8)
11                 main();
12         return 0;
13 }

*在scanf中的作用是跳过...
例如:
scanf("%*d %*d %d",&n);
printf("%d",n);
这样当输入 1 2
3的时候,只会存储n,正常打印3
*在printf("%*d",width,n);这样因为是  *  d 的顺序,所以width实际表达的是 n的输出宽度,n才是要输出的内容。
例如:
int
n=3;
scanf("%d",width);
printf("%*d",width,n);

另外: 有人对这一行

1 "*******"+2*(line>4? line-4:4-line)

感到疑惑,其实认真看一下,就是一个字符指针加上一个int整数,也就是指针的平移了。
比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。
最后这个程序用到了main函数递归调用,注意一定要写上退出条件,否则就无限循环了。

关于scanf,printf的用法还有很多,边做边学了...

posted on 2012-07-23 10:25  pcoda  阅读(1464)  评论(0编辑  收藏  举报