Tanky WooRSS

分享一个简洁有趣的打印菱形的程序[C语言]

19 Jul 2012
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

今天下午群里一位朋友问到的程序,挺简洁的,于是总结了一下,发在论坛里了,也copy到博客里来吧。

首先上程序和效果图:

程序:

#include <stdio.h>

int line = 1;
int main()
{
        printf("%*s\n",
                7-(line>4? line-4: 4-line),
                "*******"+2*(line>4? line-4:4-line)
        );
        if(++line != 8)
                main();
        return 0;
}

效果图:

首先说一下"%s"的用法,论坛里前几天可可余香童鞋已经写过了一篇总结: http://www.cppleyuan.com/viewthread.php?tid=9351是用一个int参数来代替,比如: printf("%*s\n", 5, "def");

就相当于printf("%5s\n", "def"); 指定了字符串输出的宽度。 这个用法平时见得不多,可以了解下。

另外: 有人对这一行

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

感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。

比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。

最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。

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