我需要有关此代码的建议。
这是程序在其中检查数字是否在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]);
}