我需要有关此代码的建议。

这是程序在其中检查数字是否在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]);
 }

09-30 14:35
查看更多