zoukankan      html  css  js  c++  java
  • 分享一个有趣的打印菱形的程序

    想必如果让大家写一个c语言版本的打印菱形的程序,估计都是手到擒来的吧。但是大家请看看下面的这段代码,你是否可以想到呢?

    #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函数的递归调用,注意一定要写上退出条件,否则就无限循环了。

  • 相关阅读:
    3.约束及修改数据表
    RSA总结
    消息队列面试官爱问的问题(一)
    Maven模块化开发
    系统初始化脚本和检查初始化结果脚本(centos7)
    kubectl 命令自动补全
    Kubernetes1.13.1部署Kuberneted-dashboard v1.10.1
    python实现连接MySQL、Redis并获取数据
    shell 脚本实现退点输出
    理论经典:TCP协议的3次握手与4次挥手过程详解
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2601719.html
Copyright © 2011-2022 走看看