инициализация массива из 20 элементов для последующего обновления значений, но некоторые элементы массива начинаются как ненулевые в C? почему это?

#c #kernighan-and-ritchie

#c #kernighan-and-ritchie

Вопрос:

Я пытался решить проблемы с языком программирования C с помощью K amp; R, в настоящее время на ex 1.13, и я заметил некоторое странное поведение, и мне нужен был кто-нибудь, чтобы объяснить мне, почему это происходит. Если вы посмотрите на приведенный ниже код, это грубый, но работающий прототип этой проблемы.

Код работает нормально, пока длина слова не будет равна 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;
}
 

Комментарии:

1. Опубликуйте, как вы выполнили ввод. Видимый результат и ожидаемый результат.

2. Обратите внимание, что с unsigned int array[30]; , array[] в неинициализированном.

3. Обратите внимание, что getchar возвращает an int , а не an unsigned int .

Ответ №1:

unsigned int array[30]; объявляется только массив из 30 слотов. Если вы хотите инициализировать все значения равными 0, вот синтаксис:

 unsigned int array[30] = {0};
 

Комментарии:

1. Нет, это не так, но перед отправкой любого вопроса убедитесь, что вы не можете легко найти ответ в другом месте. Не забудьте отметить ответ как правильный, чтобы закрыть вопрос. 😉