当变量值更改时,Do-while循环会重复出现

所以我试图创建一个程序来告诉我我在想0到126之间的数字。我用C编写了一个小程序,询问您在想什么数字,以及该数字是否小于我说的数字。计算我设定的上限和下限上的新数字。但是,当我输入-或+之类的答案时,我遇到一个奇怪的错误,该行应该显示1次的行被写入2次,如果我把它作为答案,则我写了3行,这很奇怪。我在这里想念什么?

    int valoreSup=126;
    char risposta;
    int valoreInf=0;
    int N = (valoreInf+valoreSup)/2;

    do
    {
        printf("E il tuo valore: %d\n",N);
        scanf("%c",&risposta);
        if (risposta=='-') {
            valoreSup=N;
            int N = (valoreInf+valoreSup)/2;
        }
        if (risposta=='+') {
            valoreInf=N;
            int N = (valoreInf+valoreSup)/2;
        }
    } while(risposta!='=');

    printf("%d\n",N);

没有错误消息(我正在使用原子),但是结果很奇怪。 N的值不变,并且循环以奇怪的方式重复。

jiayibeibao 回答:当变量值更改时,Do-while循环会重复出现

您将继续声明变量N,这将导致名为N的变量,这些变量特定于if语句主体的范围。在do-while循环之前仅保留第一个声明,然后删除其他两个声明,如下所示:

int N = (valoreInf+valoreSup)/2;
do
{
    printf("E il tuo valore: %d\n",N);
    scanf(" %c",&risposta);
    if (risposta=='-') {
        valoreSup=N;
        N = (valoreInf+valoreSup)/2;
    }
    if (risposta=='+') {
        valoreInf=N;
        N = (valoreInf+valoreSup)/2;
    }
} while(risposta!='=');

因为您要为外部N分配一个新值,而不要引入另一个不同的新变量。

此外,您可能已经看到I left a space before %c in scanf(),因为如果您对此循环进行迭代,则会读取在输入risposta的值时按的换行符。

本文链接:https://www.f2er.com/3131599.html

大家都在问