我需要有关此代码的建议。
这是程序检查数字是否在 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 时,他超出了数组范围并打印了一些“随机”值”。
最佳答案
您不需要内循环。另外,去掉 scanf
模式中的空格,因为 %d
无论如何都会忽略它们。
while(numberToGuess[i]<1 || numberToGuess[i]>20){
printf("Try again:\n");
scanf("%d", &numberToGuess[i]);
}
关于c - Scanf 在 do-while 循环中更改了错误的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820197/