【发布时间】:2016-01-15 21:32:29
【问题描述】:
我需要有关此代码的建议。
这是程序检查数字是否在 1 到 20 之间的代码。问题出现在这几行中,因为当我进入 while 循环时,scanf() 改变了 2 个数组中的数字,而不仅仅是一个。
一个是numberToGuess 数组,第二个是“随机”生成数字的数组(我使用过srand(time(NULL)))。在这段代码之前,随机生成器的函数只被调用一次。
我猜这是因为当 while 循环发生时,他从缓冲区中获取最后一个地址,但我不知道如何修复它。
while(numberToGuess[i]<1 || numberToGuess[i]>20) {
printf("Try again:\n");
for(i=0;i<4;i++) {
scanf(" %d", &numberToGuess[i]);
}
}
编辑:我找到了解决方案,它与发布的代码无关。问题发生在我声明数组的部分。数组的大小小于应有的大小(而不是 4 ,它是 3)。因此,当循环变量 (i) 等于 3 时,scanf 跳转到另一个内存位置,即第二个数组的位置并更改为 1。在第二个数组上,当循环等于 3 时,他超出了数组范围并打印了一些“随机价值”。
【问题讨论】:
-
读取字符“%c”时需要scanf中的空间
-
您在
for循环中设置i,但您在开始循环之前访问它。那没有意义。你能展示整个代码吗? -
你为
numberToGuess分配空间了吗?我感觉它是一个未初始化的指针。
标签: c arrays while-loop buffer scanf