c - 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 的值没有改变,循环以一种奇怪的方式重复。
解决方案
您不断地重新声明 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之前留了一个空格%c
scanf()
,因为如果您遍历此循环,您将读取在输入 for 值时按下的换行符risposta
。
推荐阅读
- asp.net - 未找到服务“Microsoft.SqlServer.Management.IRegistrationService”(Microsoft.SqlServer.Management.SDK.SqlStudio)
- javascript - 使用启动器意图打开 dhee.ai 网络小部件?
- python - 如何计算每个客户销售商品的频率?
- performance - 异构kubernetes集群,容器性能差异
- react-native - React-Native:电子邮件的主题行与使用 Share.share 的消息内容相同
- php - 如果表中存在数据,则不再保存
- python - Python cv2 输出无效视频
- c++ - c++ shared_ptr 断言`px != 0' 失败
- typescript - 将扩展类型道具传播到 Typescript 接口
- groovy - Groovy 在 findresult 中添加了一些条件