首页 > 解决方案 > 初始化一个包含 20 个元素的数组以稍后更新值,但数组的某些元素在 C 中以非零开头?这是为什么?

问题描述

我试图通过 K&R 目前在 ex 1.13 上解决 C 编程语言的问题,我注意到一些奇怪的行为,我需要有人向我解释为什么会发生这种情况。如果您查看下面的代码,它是该问题的一个粗略但有效的原型。

代码工作正常,直到字长为 9。即 j<10,但如果我增加 j 循环以说 j<20,试图增加它将显示的字长,它会让我陷入无限循环。

在尝试对其进行故障排除时,我注意到它可能会发生,因为初始化我的数组后,我的数组中的一些元素一开始就不是 0,这正常吗?如果是这样,为什么会这样?

#include<stdio.h>
int main(void)
{
    unsigned int     c;
    unsigned int     i;
    unsigned int     j;
    unsigned int     k;
    unsigned int     array[30];
    i = 0;
    j = 0;
    k = 0;
    while((c= getchar())!= EOF)
    {
        if((c==' ')|| (c == '\t')||(c=='\n'))
        {
            array[i]++ ;
            i = 0;
        }
        else{
            i++;
        }
    }
    for(j=1;j<10;j++)
    {
        printf("%d \t",j);
        for(k=0; k< array[j]; k++)
        {
            putchar('-');
        }
        putchar('\n');
    }
    return 0;
}

标签: ckernighan-and-ritchie

解决方案


unsigned int array[30];只声明一个包含 30 个插槽的数组。如果要将所有值初始化为 0,语法如下:

unsigned int array[30] = {0};

推荐阅读