C语言 Printf无法打印字符数组

qni6mghb  于 2023-01-16  发布在  其他
关注(0)|答案(1)|浏览(258)

我的printf()函数一直没有向终端打印任何内容,而是打印了数组中的字符。

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    char s[4];
    s[0] = '0';
    s[1] = '0';
    s[2] = '0';
    s[3] = '\0';
    int nums[3] = {0, 0, 0};

    for (int i = 92; i < 110; i++)
    {
        // Number maxes at three digits
        for (int j = 0; j < 3; j++)
        {
            nums[2 - j] = i % 10;
            i /= 10;
        }

        for (int k = 0; k < 3;  k++)
        {
            s[k] = (char) nums[k];
        }

        printf("%s\n", s);
    }
}

我试图让程序在每次循环完成时打印出3个递增的数字。如果数字不是3位数,那么所有未占用的位置都应该是0。

dsf9zpds

dsf9zpds1#

当其他人在评论你的代码时,我正在测试你的代码。正如我发现的测试,程序没有打印出任何东西,并且由于评论中指出的问题而可能在无限循环中运行。记住这些评论,下面是你的程序的重构版本。

#include <stdio.h>

int main(void)
{
    char s[4];
    s[0] = '0';
    s[1] = '0';
    s[2] = '0';
    s[3] = '\0';
    int nums[3] = {0, 0, 0};
    int x;

    for (int i = 92; i < 110; i++)
    {
        x = i;                          /* Need to use a work variable - shouldn't be modifying the loop counter */
        // Number maxes at three digits
        for (int j = 0; j < 3; j++)
        {
            nums[2 - j] = x % 10;
            x /= 10;
        }

        for (int k = 0; k < 3;  k++)
        {
            s[k] = (char) nums[k] + '0';    /* As noted in the comments */
        }

        printf("%s\n", s);
    }
}

要指出的事情。

  • 如前所述,在循环中修改用作循环计数器的变量并不是一个好主意,如所经历的无限循环行为中所述,因此将循环计数器放入工作变量中以用于所需的计算。
  • 同样如注解中所述,由于字符数组中需要ASCII字符值,因此需要将字符“0”(零)的值添加到为每个位置导出的整数值中,以便在字符数组中获得等效字符。

重构了这些位之后,下面是测试运行的最终输出。

@Vera:~/C_Programs/Console/PrintChars/bin/Release$ ./PrintChars 
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109

给予这些调整,看看它是否符合您项目的精神。

相关问题