将字符传递给C中的函数时出错

时间:2012-09-03 12:58:33

标签: c

我有以下功能

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 个答案:

答案 0 :(得分:11)

c == 'b' || 'B'

始终评估为1,因为它被解析为

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

我打赌你想要

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

答案 1 :(得分:1)

这个

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

应该是:

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

否则,你正在测试这个:

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

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

因为'B'不为零。

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

答案 2 :(得分:1)

你写了

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

你的意思是

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

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

你应该使用后者。

你应该作为一个偏执的偏执狂接近这些条件,以确保它满足你的条件。如果它适用于所有条件,那么你可以在没有paranthesis的情况下尝试。

答案 3 :(得分:0)

c == 'b' || 'B'始终求值为1,因为'B'是非零值,因此第二个操作数始终为true。

你需要测试你的状况。

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