2013-10-09 7 views
0

Я не могу заставить свои операторы if работать. И независимо от номера в выходные дни, если заявление продолжает проявляться. Я знаю, что я задавал подобный вопрос ранее, но он просто не будет работать независимо от того, что я пыталсяC++ if statements

#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; 

}

+0

изменить условия, как это: (день == 1 || день == 6 || день == 7) – memo1288

+0

Включите вас компилятор предупреждения и получить компилятор вызывать предупреждения как ошибки, и ваш компилятор будет ловить ошибки, подобные этому для вас. Многим компаниям требуется, чтобы код C++ собирал предупреждение бесплатно, поэтому неплохо привыкнуть. –

ответ

4

Изменить

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

в

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

И то же самое для некоторых подобных if условий.


Ваш оригинальный тест состояние if (day == 1 || 6 || 7) эквивалентно if ((day == 1)||6||7), всегда вычисляется как верно, так как все ненулевые числа (в данном случае, 6 и 7) оцениваются как истинные.

+0

Спасибо (: только первокурсник в колледже, пытаясь получить степень моей компьютерной науки.похоже, что у меня долгий путь. еще раз спасибо – user2860864

0

C и C++ могут интерпретировать любое числовое значение как логическое значение. Ноль - это ложь, и все остальное верно. Поэтому синтаксис, как это:

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

интерпретируется как «если (день один) или (6 не равен нулю) или (семь не равен нулю), то ...»

Правильный способ написать это

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

логический оператор ИЛИ || действует только на булевых значений, которые литеральные значения, такие как 6 и 7 не отвечающих требованиям. Вам необходимо отделить свои условия от действительных булевых операторов, используя операторы связи, доступные в C++ <,>,<=,>=,==,!,etc. Попробуйте использовать:

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

6 и 7 фактически truthy значения в C++ и сделает ваше состояние всегда верно, ваше текущее утверждение эквивалентно:

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

, который всегда правда.

0

С вашим if (day == 1 || 6 || 7) он выполнит день == 1, который вернет либо 0, либо 1. Затем он будет продолжать его с ненулевыми (то есть истинными) числами и всегда дает 1 результат, то есть true.

изменить его if (day == 1 || day == 6 || day == 7) if (day == 2 || day== 4) и if (day == 2 || day == 5)