C语言关于printf输出的问题

C语言中printf中为什么输出的结果*位置很奇怪?望解答!

img

img

因为你的控制台的字体不是等宽的,空格的宽度大,星号的宽度小

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7646494
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言printf的特殊使用
  • 你还可以看下c语言参考手册中的 c语言-printf()
  • 除此之外, 这篇博客: C语言从最基础实现printf中的 输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 接下来我们可以使用if或者switch对接收到的不同的命令作出不同的处理
    但我个人更加倾向于使用switch,代码简洁明了

    switch (*begin) {//这里的begin就是将指针移到%或者%#后的字符,我们只需要判断他是c(%c)还是d(%d)还是s(%d)等等
        case 'c':
            my_putchar(va_arg(arg, int));
            break;
        case 'd': case 'i':
    //va_arg:arg指向变参数列表中的下一个参数,返回arg指向的参数值,是一个类型为int的表达式。
            my_put_nbr(va_arg(arg, int));
            break;
        case 's':
            my_putstr(va_arg(arg, char*));//va_arg返回char*表达式
            break;
        case 'f':
            get_float(va_arg(arg, double));
            break;
        default:
            normal_situ(begin,arg);
            break;
            //我个人有个格式“洁癖”。。就是一段function我不会写超过20行。。所以default是连接着另一个switch。
        }
    

    完整代码链接点这里,麻烦要下载的大家,顺手给我点一个star

    如果有讲的不清楚的地方,大家可以在下方评论留言,完整代码中附带所有我自己写的基础的函数,例如:
    putchar
    putnbr
    putstr
    strlen
    pow
    还有十进制转二进制,转十六进制等等

    希望文章能帮到大家

  • 您还可以看一下 尹成老师的终极版C语言(四)课程中的 printf井号格式符控制小节, 巩固相关知识点