c - 当变量值发生变化时,Do-while 循环会重复

标签 c char

所以我试图创建一个程序来告诉我我正在想的 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 的值没有改变,并且循环以一种奇怪的方式重复。

最佳答案

您不断重新声明变量 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 值时按下的换行符。

关于c - 当变量值发生变化时,Do-while 循环会重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782650/

相关文章:

c++ - 为什么尽管只解决了一个项目,但所有 C++ 数组元素都得到了设置?

java - 使用 char 确定字母数字?

java - 将指针转换为字符串并作为字符数组发送无法正常工作

c - 不是一切都在它应该在的地方,为什么会出现段错误?

c - if 和 else 都正在执行

c - C程序出错,第一次使用VS2017

c - malloc,它如何分配地址?

java - 尝试将字符串更改为 altcase

c - 读函数从不在 C 中返回 0

c - 使用除 cat 之外的命令进行重定向