在网上看到的,贴过来记录一下
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的用法还有很多,边做边学了...