提问人:SunnyD_ 提问时间:9/25/2023 更新时间:9/25/2023 访问量:54
If 语句默认为 true [closed]
If statement defaults to true [closed]
问:
这是我编写的一个简单的过程,用于尝试解决我在使用其他代码时遇到的问题。有人可以告诉我为什么 if 语句默认为 true 吗?我读过一些关于 scanf 需要在变量前加一个空格的东西,但我做到了。
#include <stdio.h>
#include <stdlib.h>
int main(){
char answer;
printf("Y or N ");
scanf(" %c", &answer);
if(answer == 'Y' || 'y'){
printf("you said yes \n");
}
else if (answer == 'N' || 'n'){
printf("you said no \n");
}
else {
printf("sorry, fail \n");
}
return 0;
}
不管我输入的是 N 还是 n 或任何其他字符或偶数,它都会吐出“你说是”。
答:
2赞
NoDakker
9/25/2023
#1
问题出在测试逻辑上。
if(answer == 'Y' || 'y')
这种说法并不像你想象的那样有效。“y”表示您的程序的值为“true”,因为缺乏更好的表述方式。
您最可能想要的是这样的比较测试:
if((answer == 'Y') || (answer =='y'))
请注意,以下是程序的重构版本。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char answer;
printf("Y or N ");
if (scanf("%c", &answer) != 1)
return 1;
if((answer == 'Y') || (answer =='y'))
{
printf("you said yes \n");
}
else if ((answer == 'N') || (answer == 'n'))
{
printf("you said no \n");
}
else
{
printf("sorry, fail \n");
}
return 0;
}
以下是在终端进行的一些测试。
craig@Vera:~/C_Programs/Console/ScanTest/bin/Release$ ./ScanTest
Y or N U
sorry, fail
craig@Vera:~/C_Programs/Console/ScanTest/bin/Release$ ./ScanTest
Y or N Y
you said yes
craig@Vera:~/C_Programs/Console/ScanTest/bin/Release$ ./ScanTest
Y or N N
you said no
回顾一下,请注意逻辑“and”和“or”运算符在各种测试(“if”、“while”等)中的工作方式。
上一个:链接多个大于/小于运算符
评论
answer == 'Y' || 'y'
answer == ('Y' || 'y')
('Y' || 'y')