代码似乎有逻辑错误,但是当我 运行 它按我想要的方式工作
The code seems to have a logic error but when I run it works the way I would like
我试图将摄氏温度转换为华氏温度和开尔文温度,但程序要求用户输入要进行何种转换的部分似乎存在逻辑错误。
#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);
部分应该有逻辑错误。运算符检查 choice 是否不同于 1 和 2。如果用户输入为 1,则运算符应为 false 和 true,然后重新 运行 查询,但它会正常执行。应该有一个问题,运行 一遍又一遍地问同样的问题,但事实并非如此。当我使用布尔运算符||
时,重复的问题happens.I想知道这里发生了什么。
while(choice != 1 && choice != 2);
部分没有逻辑错误
当输入1
时,choice != 1
为假,所以条件为假,循环结束。
当输入2
时,choice != 1
为真,而choice != 2
为假,所以条件也为假,循环结束
当输入3
时,choice != 1
和choice != 2
都为真,所以条件为真,继续循环。
但是,您的代码有问题:您没有检查 scanf()
的 return 值。例如,当先输入 3
,然后输入 a
时,a
不是 %i
的有效输入,因此不会被消耗。 choice
保持 3
并且无限循环。
您希望 choice
成为 1
或 2
。所以,如果
你会很好
(choice == 1) || (choice == 2)
这意味着如果它的否定为真,你想进入循环,或者
!((choice == 1) || (choice == 2))
只要应用德摩根定律,你就会得到
( !(choice == 1) && !(choice == 2) )
或
((choice != 1) && (choice != 2))
这表明你所拥有的不是错误。
我试图将摄氏温度转换为华氏温度和开尔文温度,但程序要求用户输入要进行何种转换的部分似乎存在逻辑错误。
#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);
部分应该有逻辑错误。运算符检查 choice 是否不同于 1 和 2。如果用户输入为 1,则运算符应为 false 和 true,然后重新 运行 查询,但它会正常执行。应该有一个问题,运行 一遍又一遍地问同样的问题,但事实并非如此。当我使用布尔运算符||
时,重复的问题happens.I想知道这里发生了什么。
while(choice != 1 && choice != 2);
部分没有逻辑错误
当输入1
时,choice != 1
为假,所以条件为假,循环结束。
当输入2
时,choice != 1
为真,而choice != 2
为假,所以条件也为假,循环结束
当输入3
时,choice != 1
和choice != 2
都为真,所以条件为真,继续循环。
但是,您的代码有问题:您没有检查 scanf()
的 return 值。例如,当先输入 3
,然后输入 a
时,a
不是 %i
的有效输入,因此不会被消耗。 choice
保持 3
并且无限循环。
您希望 choice
成为 1
或 2
。所以,如果
(choice == 1) || (choice == 2)
这意味着如果它的否定为真,你想进入循环,或者
!((choice == 1) || (choice == 2))
只要应用德摩根定律,你就会得到
( !(choice == 1) && !(choice == 2) )
或
((choice != 1) && (choice != 2))
这表明你所拥有的不是错误。