为什么在 for 循环的第一次迭代中正确接收变量,在 printf 中,而不是其余部分

  • 本文关键字:printf 变量 余部 循环 for 第一次 迭代 c
  • 更新时间 :
  • 英文 :

for (n = 1; n <= num1, n++)
{
    num2 = num1 - n;
    printf("%*s%*cn", num2, "", n, '#');   
}

我正在尝试获取主题标签的半金字塔,左下角左对齐,高度 x 宽度由单个输入 (num1) 确定。喜欢这个:

num1 = 4
Output:
   #
  ##
 ###
####

相反,我得到了这个(输入为 4):

   #
   #
   #
   #

有许多方法可以做到这一点。这是一个最喜欢的。它将宽度作为程序的第一个参数(默认为 5):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char **argv) {
    int width = argc > 1 ? atoi (argv[1]) : 5;
    if (width < 0) width = -width;
    char *hash = "################################################";
    size_t max = strlen (hash);
    char *p = hash + max;
    int i = width > max ? max : width;
    while (i--)
        printf ("%*sn", width, p -width + i);
    return 0;
}

输出

$ ./bin/padstr_hash
    #
   ##
  ###
 ####
#####
$ ./bin/padstr_hash 6
     #
    ##
   ###
  ####
 #####
######

%*c是字段宽度或精度的说明符。 您不是在打印n字符,而只是打印一个填充n空格的字符。

如果要多次打印一个字符,请使用for循环。

最新更新