0

我有以下功能

int namecomp(char c);

部分功能代码

else if (c == 'b' || 'B')
    i=2;

我叫它的方式main()

j= namecomp(s);

s定义为char s = 'B';

有一个错误,每当我尝试使用j该值时,它总是1主要的。请帮助我知道错误的确切位置。谢谢!

编辑:对不起,这些都不起作用。我发布了完整的代码以寻求帮助

int main (int argc, char* argv [])
{
int i;                  
int j;
char s = 'B';
j= namecomp(s);
printf ("%d",j);
}

int namecomp(char c)
{
int i;

    if (c == 'a'||'A') 
        i=1;

    else if ((c == 'b' || c == 'B'))
    i=2;

    return i;

}
4

4 回答 4

11
c == 'b' || 'B'

总是计算为1,因为它被解析为

(c == 'b') || 'B'

我打赌你想要

(c == 'b') || (c == 'B')
于 2012-09-03T12:59:54.067 回答
1

(c == 'b' || 'B')

应该:

(c == 'b' || c == 'B')

否则,您将对此进行测试:

((c == 'b') || 'B')

这与

((c == 'b') || true)

因为'B'是非零的。

请记住,逻辑和/或符号不能逻辑测试中使用,只能将逻辑测试连接在一起。

于 2012-09-03T13:00:55.570 回答
1

你写了

(c == 'b' || 'B')    // this can be ( (c=='b') || 'B') in your compiler

你的意思是

(c == ('b' || 'B'))

或者

( (c == 'b') || (c=='B') )

你应该使用后者。

您应该以偏执狂的方式处理这些条件,以确保它满足您的条件。如果它适用于所有条件,那么您可以尝试不使用括号。

于 2012-09-03T13:01:15.120 回答
0

c == 'b' || 'B'总是计算为 1,因为'B'它是一个非零值,所以第二个操作数总是为真。

您需要同时测试您的状况。

if (c == 'b' || c == 'B')
于 2012-09-03T13:00:25.470 回答