If 语句默认为 true [closed]

If statement defaults to true [closed]

提问人:SunnyD_ 提问时间:9/25/2023 更新时间:9/25/2023 访问量:54

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

2个月前关闭。

这是我编写的一个简单的过程,用于尝试解决我在使用其他代码时遇到的问题。有人可以告诉我为什么 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 或任何其他字符或偶数,它都会吐出“你说是”。

c if 语句 扫描

评论

3赞 klutt 9/25/2023
你从哪里学到的会起作用的?answer == 'Y' || 'y'
0赞 SunnyD_ 9/25/2023
不完全确定,但我发誓,如果陈述如何处理 char,不是吗?
2赞 klutt 9/25/2023
它等价于 .你认为什么等于?answer == ('Y' || 'y')('Y' || 'y')
2赞 SunnyD_ 9/25/2023
是我必须做的问题 答案 == 'Y' ||答案 == 'y' ?
2赞 klutt 9/25/2023
这是正确的

答:

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”等)中的工作方式。