0

if ステートメントが機能しません。そして、数に関係なく、週末の if ステートメントが表示され続けます。以前に同様の質問をしたことは知っていますが、何を試してもうまくいきません

#include <iostream> 
#include <string>
using namespace std;

int main ()
{
 int day;
    cout << " Enter day of the week " << endl;
    cin >> day;
    switch (day)
{
    case 1 : 
    case 6 : 
    case 7 :
        cout << "weekend";
        break;

    case 2 : 
    case 4 :
        cout << "going to C++ Class";
        break;

    case 3 : 
    case 5 :
        cout << "studying for C++ Class";
        break;

    default :
        cout << "invalid day number";
    }

    if ( day == 1 || 6 || 7)
        cout << "weekend" << endl;
    else
        if (day == 2 || 4)
            cout << "Going to C++ Class";
        else 
            if (day == 2 || 5)
                cout << "studying for C++ Class";
            else 
                if ( day < 1 || day > 7)
                    cout << "bad day number";





    system("pause");
    return 0;

}

4

4 に答える 4

4

変化する

if ( day == 1 || 6 || 7)

if ( day == 1 || day == 6 || day == 7)

そして、いくつかの同様のif条件についても同じです。


すべての非ゼロの数値 (この場合はと) が true として評価されるため、元のテスト条件if (day == 1 || 6 || 7)は と同等であり、常に trueとして評価されます。if ((day == 1)||6||7)67

于 2013-10-09T02:30:46.273 に答える
1

論理 OR 演算子はブール||値でのみ動作し、やなどのリテラル値は修飾されません。C++ で使用可能な関係演算子を使用して、条件を有効なブール ステートメントに分割する必要があります。使用してみてください:67<,>,<=,>=,==,!,etc

if (day == 1 || day == 6 || day == 7)

6そして7実際には C++ のの値であり、条件を常に真にします。現在のステートメントは次のようになります。

if(day == 1 || true || true)

これは常に真実です。

于 2013-10-09T02:32:21.937 に答える
0

C および C++ は、任意の数値を論理値として解釈できます。ゼロは偽で、それ以外はすべて真です。したがって、次のような構文:

if ( day == 1 || 6 || 7)

は、「if (day is one) or (6 is not zero) or (seven is not zero) then...」と解釈されます。

正しい書き方は、

if ( day == 1 || day == 6 || day == 7)
于 2013-10-09T02:32:03.260 に答える
0

あなたのif ( day == 1 || 6 || 7)場合、最初に day==1 が実行され、0 または 1 が返されます。次に、0 以外 (つまり真) の数値で論理和演算が行われ、常に 1 つの結果 (つまり真) が返されます。

に変更しif ( day == 1 || day == 6 || day == 7) if (day == 2 || day== 4)if (day == 2 || day == 5)

于 2013-10-09T02:35:16.433 に答える