【发布时间】:2021-06-21 18:16:55
【问题描述】:
我尝试将摄氏度转换为华氏和开尔文转换器,但在程序要求用户输入关于要进行哪种转换的部分似乎存在逻辑错误。
#include <stdio.h>
#include <stdlib.h>
#define Fx 1.8
#define Fy 32
#define Kx 273.15
int main(){
double c;
double f;
int choice;
printf("Convert Celsius to:\n[1] Fahrenheit\n[2] Kelvin\n");
do{
printf("Choose: ");
scanf("%i", &choice);
}while(choice != 1 && choice != 2);
if (choice == 1){
printf("°C = ");
scanf("%lf", &c);
f = c * Fx + Fy;
printf("°F = %f\n", f);
}
else{
printf("°C = ");
scanf("%lf", &c);
printf("°K = %lf\n", c + Kx);
}
return 0;
}
在while(choice != 1 && choice != 2); 部分应该有一个逻辑错误。运算符检查选择是否不同于 1 和 2。如果用户输入为 1,则运算符应该为 false 和 true 并重新运行查询,但它会正常执行。应该有一个问题并一遍又一遍地运行相同的问题,但事实并非如此。当我使用布尔运算符|| 时,问题的重复发生了。我想知道这里发生了什么。
【问题讨论】:
-
不是 AND 工作方式。
-
所以...?当条件为真时,循环正在执行。当输入为
1时,如你所说为假。 -
假设,“如果 Luiz 不是大象并且 Luiz 不是长颈鹿,我们会这样做。”现在,你不是大象,也不是长颈鹿,所以我们不这样做。
-
但是现在改变一下:“如果 Luiz 不是人类并且 Luiz 不是长颈鹿,我们会这样做。”现在,你不是长颈鹿,但你是人,所以我们会做的。
-
所以只需要满足其中一个条件吗?