2016-06-05 2 views
2

Я сделал довольно короткий текст на основе программы анимации:Случайные символов Начала печататься без инициализации

#include <iostream> 

void animation(char words[], int sizeOfWords) { 
    for(int x = 0; x < sizeOfWords; x++){ 
     for(double y = 0; y < 10000000; y++); 
     std::cout << words[x]; 
     if(words[x] == '!') std::cout << std::endl; 
    } 
} 

int main() { 
    char words[] = {'H','e','l','l','o',' ','W','o','r','l','d','!','T','h','i','s',' ','i','s',' ','m','y',' ','f','i','r','s','t',' ','C','+','+',' ','a','n','i','m','a','t','i','o','n','!','H','o','p','e',' ','y','o','u',' ','e','n','j','o','y','e','d','!'}; 

    int amountOfLetters = 0; 
    for(unsigned x : words) amountOfLetters++; 

    animation(words, amountOfLetters); 
} 

Когда я впервые сделал программу, которую я забыл инициализировать INT amountOfLetters; до 0. То есть, когда я получил все эти случайные символы. Программа выполнена с инициализацией или без нее. Просто не назначая 0, я получаю эти дополнительные функции в конце.

Без инициализации переменной даст следующий результат:

Hello World! Это моя первая анимация на C++! Надеюсь, вам понравилось! ! t ht ÉH P j T j Ðou2ö¤. ■ Á╬ouÈ╬ouht mzou Возвращенный процесс 0 (0x0) время выполнения: 11.466 s Нажмите любую клавишу, чтобы продолжить.

С инициализацию переменной даст следующий результат:

Hello World! Это моя первая анимация на C++! Надеюсь, вам понравилось! Возвращенный процесс 0 (0x0) время выполнения: 4.444 s Нажмите любую клавишу, чтобы продолжить.

Вы можете попробовать запустить коды самостоятельно, если хотите. Я просто хотел бы знать, почему печатаются эти символы. Если вы можете помочь, я буду благодарен. Если не спасибо за то, что остановились.

Это сообщение не является дубликатом Почему неинициализированный массив символов заполнен случайными символами?. Я говорю о передаче количества элементов в массиве и передаче их в качестве аргумента, после чего их перебирает. Другой пост просто говорит об инициализации массива Без информации в нем и его печати. Между тем, опять же, я говорю о Имея информацию, только размер массива, на котором они были, был проблемой. Просто их речь идет о печати массива без элементов, моя - обход через массив с элементами, но ошибочно делая ошибку для размера.

+2

Возможный дубликат [Почему неинициализированный массив символов заполнен случайными символами?] (Http://stackoverflow.com/questions/33924275/why-uninitialized-char-array-is-filled-with-random-symbols) – martijnn2008

+0

Ох ... Я попробовал посмотреть, не смог найти. Даже когда я вошел в заголовок, он не показывал ничего подобного. В любом случае, я прочитаю его, спасибо. –

+0

Я использовал Google, но не знаю, отвечает ли этот вопрос на ваш вопрос. – martijnn2008

ответ

1

Когда я впервые сделал программу, я забыл инициализировать int amountOfLetters; до 0. То есть, когда я получил все эти случайные символы. Программа выполнена с инициализацией или без нее. Просто не назначая 0, я получаю эти дополнительные функции в конце.

Это потому, что без инициализации amountOfLetters Операция amountOfLetters++; не определена.

amountOfLetters может иметь произвольное значение в начале цикла, так как оно осталось в стеке из предыдущих операций.


Также обратите внимание, что вы могли бы значительно упростить и улучшить ваш код просто опуская петлю и написать:

animation(words, sizeof(words)); 
+0

Благодарим вас за 'анимацию (слова, sizeof (слова)), это действительно помогло. Кроме того, понимая, что 'amountOfLetters' может начинаться с любого случайного числа, а приращение оттуда помогает мне понять мою ошибку. Это как 'for (int x = 0; x <** некоторое число прошло последний индекс слов массива **; x ++) {...}' –

1

Вашей animation функции доступа к массив символов по индексу, пока индекс == sizeOfWords. Если amountOfLetters не инициализирован, вы начнете увеличивать случайное значение и, следовательно, читаете его после конца массива в animation. Это, конечно, имеет случайные значения.

+0

Спасибо, что ответили. Я рассмотрю это в следующий раз. Хотя я сомневаюсь, что сделаю sizeOfWords, считаю, что я могу легко сделать, как другой комментарий, сказал 'sizeOf (words)'. –

+0

@ J.Purcell Используйте свое _ново оружие! 'sizeof (words)' фактически не будет работать внутри функции 'animation()'. –

+0

Мм, я это заметил. При работе с небольшими проблемами с моим кодом в начале я попытался сделать что-то похожее на 'variable x = sizeof (words)', и это не сработало. Понял, почему, теперь я знаю. Благодарю. –

Смежные вопросы