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''B'はゼロ以外の値であるため、常に 1 に評価されるため、2 番目のオペランドは常に true です。

両方の状態をテストする必要があります。

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