所以我试图创建一个程序来告诉我我正在想的 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/