我制作了一个相当简短的基于文本的动画程序:
#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 ++动画! 希望你喜欢! ! thtÉHPj TjÐou2ö¤。■╬╬ouÈ╬ouhtmzou 进程返回0(0x0)执行时间:11.466秒 按任意键继续。
初始化变量将产生以下结果:
Hello World! 这是我的第一个C ++动画! 希望你喜欢! 进程返回0(0x0)执行时间:4.444秒 按任意键继续。
如果需要,您可以尝试自己运行代码。我想知道为什么这些符号被打印出来。如果你能帮我,我会很感激。如果不是谢谢你停下来。
这篇文章不是为什么未初始化的char数组中填充了随机符号?。我谈到传递数组中的元素数量并将它们作为参数传递,然后循环遍历它们。另一篇文章只是简单地讨论初始化数组没有信息并打印它。同时,我再次谈论有信息,只是持有它们的数组的大小是问题所在。他们只是打印一个没有元素的数组,我的是通过一个带有元素的数组循环,但错误地为这个大小做错了。
答案 0 :(得分:1)
当我第一次制作程序时,我忘了初始化int amountOfLetters;这是我得到所有这些随机符号的时候。无论是否初始化程序都可以。只是没有给它分配0,我最终得到了这些额外的东西。
那是因为没有初始化amountOfLetters
amountOfLetters++;
操作是未定义的行为。
amountOfLetters
在循环开始时可能有一个任意值,因为它在之前的操作中留在了堆栈中。
另请注意,您可以大大简化和改进代码,只需省略循环并写入:
animation(words, sizeof(words));
答案 1 :(得分:1)
您的animation
函数正在按索引访问char数组,直到索引== sizeOfWords
。如果amountOfLetters
未初始化,您将开始递增随机值,因此将在animation
中读取数组的末尾。当然,这具有随机值。