if (class == 'a','A')
我只是在用户输入'a'或'A'时尝试继续。每当我构建它时,它都会警告“逗号的左手操作数没有效果”。
我对C很新,所以如果我不够具体或遗漏了一些明显的东西,我会道歉。
答案 0 :(得分:4)
这不是怎么做的,你应该这样做
if(class == 'a' || class == 'A')
答案 1 :(得分:4)
将条件更改为
if ( class == 'a' || class == 'A' )
至于你的原始表达
if (class == 'a','A')
然后使用逗号运算符,表达式的值为' A'。作为' A'不等于零,那么条件总是等于真。逗号前的表达式将被丢弃。
答案 2 :(得分:1)
虽然目前的答案都是正确的,但我认为这可能更为惯用:
#include <ctype.h>
...
if (tolower(class) == 'a')
{
...
}
答案 3 :(得分:0)
在if (class == 'a','A')
中,左半部分是比较class == 'a'
,可以评估为true
或false
(在布尔意义上的¹) 。 右半部分仅为'A'
,不等于0
,因而不是true
。左半部分得到评估,但结果未被使用。然后评估右半部分,其“结果”为'A'
,即true
。因此,代码就好像你写了
if (true)
...
您可以使用右半部分的“0”来检查:
if (class == 'a', 0)
printf ("if-statement is true\n");
else
printf ("if-statement is false\n");
并运行它(在强制编译器编译之后)确实会显示“false”行。
编译器抱怨,因为左半部分class == 'a'
“无效”:它对class
或if
语句的结果没有副作用。因此,编译器假定这是错误,因此发出警告。这是一个警告,而不是错误,因为语法是正确的。为了比较,你 允许写一些类似的东西,比如
if (class = 'a', 'A')
printf ("class == a,A seems to be true\n");
else
printf ("That didn't work.\n");
有有效副作用(class
获取字符常量'a'
的值) - 但它也总是声明它似乎是 true ,因为后半部分是传递给if
语句的内容。
¹对于C,我只在{em> boolean
意义上使用true
和false
,因为C默认情况下没有包含{{1}的这些命名值的概念(这通过名称定义常量)。但是,基本概念是相同的:stdbool.h
语句计算其参数,如果它的计算结果为if
,则会被视为false
(因此不会执行以下表达式),{{ 1}}如果它的评估范围不是0
。