首页 > 解决方案 > 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);

没有错误消息(我正在使用 atom),但结果很奇怪。N 的值没有改变,循环以一种奇怪的方式重复。

标签: cchar

解决方案


您不断地重新声明 variable 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,而不是引入另一个不同的新变量。

此外,正如您可能已经看到的那样,我在in之前留了一个空格%cscanf(),因为如果您遍历此循环,您将读取在输入 for 值时按下的换行符risposta


推荐阅读