打印字符而不是数字时(C 程序)

While printing characters instead of numbers (C program)

我正在尝试打印一个数字的升序序列,如下所示:00 01, 00 02, 00 03,..., 00 99, 01 02, ..., 97 99, 98 99。不幸的是,C 程序正在打印来自 ASCII table 的特殊字符,而在数字 d 中(最后一个),它应该只能达到数字 9。我怎样才能使循环不打印 ASCII 字符并只打印数字?我无法使用 printf().

#include<unistd.h>

void    print_character_comma(char a, char b, char c, char d)
{
    write(1, &a, 1);
    write(1, &b, 1);
    write(1, " ", 1);
    write(1, &c, 1);
    write(1, &d, 1);
    if (!(a == 57 && b == 56 && c == 57 && d == 57))
        write(1, ", ", 2);
}

void    comb(char a, char b, char c, char d)
{   
    while (a <= 57)
    {
        while (b <= 56)
        {
            c = a;
            while (c <= 57)
            {
                d = 1;
                while (d <= 57)
                {
                    print_character_comma(a, b, c, d);
                    d++;
                }
                d = 48;
                c++;
            }
            c = 48;
            b++;
        }
        b = 48;
        a++;
    }
}

void    ft_print_comb2(void)
{
    comb('0', '0', '0', '0');
}

int main()
{
    ft_print_comb2();
}

我能想到的最简单的解决方案是对每个最大数字使用一个 for 循环。例如,对于最多 2 位数字 (00-99):

#include <stdio.h>
int main()
{
    int i, j;
    for(i=0; i<9; i++)
    {
        for(j=0; j<9; j++)
        {
            printf("%d%d\t", i, j);
        }
    }
}

如果你想要更多的数字,你只需要添加更多的 for 循环并添加更多的 %d 到 printf。

comb() 你有:

d = 1 ;

您打算去的地方:

d = '1' ;

请注意,在 comb() 中,您还明确分配 cd 覆盖传递的参数。因此这些参数是不必要的。这样删除它们:

void comb(char a, char b)
{   
    char c, d ;
    ...
}

生成相同的结果。