2014-12-25 3 views
-5
#include <iostream> 
#include <string> 

using namespace std; 


int main() 
{ 
//Get Seed Color 
string seedColor = ""; 
cout << "Enter Your Seed's Color: \n"; 
cin >> seedColor; 
// Get Temp 

if(seedColor != "red" || seedColor != "Red" && seedColor != "blue" || seedColor != "Blue") 
    { 
    cout << "Invalid Response. Please enter Red or Blue for the Color.\n"; 
    return 0; 
    } 

int temp = 0; 
cout << "Enter Your Seed's Temperature: "; 
cin >> temp; 

// if Red Seed 
if(seedColor == "Red"|| seedColor == "red") 
{ 


    //if temp >= 75 
    if (temp >= 75) 
    { 

     // Get Soil Moisutre 
     string soilMoisture = ""; 
     cout << "Enter Your Soil's Moisture (Wet or Dry): "; 
     cin >> soilMoisture; 

     // Soil Dry Output Dandelion 
     if (soilMoisture == "Wet" || soilMoisture == "wet") 
     { 
      cout << "A Sunflower will grow!\n"; 
     } 

     if (soilMoisture == "Dry" || soilMoisture == "dry") 
     { 
      cout << "A Dandelion will grow!\n"; 
     } 
    } 


    else 
    { 
     // Otherwise Mushroom 
     cout << "You will have a Mushroom!"; 
    } 



} 
// if Blue seed 
if (seedColor == "Blue" || seedColor == "blue") 
{ 


    //if temp b/t 60 && 70 
    if (temp >= 60 && temp <= 70) 
    { 
     // Get Soil Moisutre 
     string soilMoisture = ""; 
     cout << "Enter Your Soil's Moisture (Wet or Dry): "; 
     cin >> soilMoisture; 

     // Soil Dry Output Sunflower 
     if (soilMoisture == "Dry" || soilMoisture == "dry") 
     { 
      cout << "A Sunflower will grow!"; 
     } 
     // Soil Wet Output Dandelion 
     if (soilMoisture == "Wet" || soilMoisture == "wet") 
     { 
      cout << "A Dandelion will grow! \n"; 
     } 

    } 
    else 
    { 
     // Otherwise Mushroom 
     cout << "You will have a Mushroom! \n"; 
    } 


} 
    return 0; 
} 

Привет, ребята, поэтому у меня проблемы с решением этой проблемы. Всякий раз, когда я запускаю этот код независимо от того, добавляю ли я «красный» «синий» или даже что-то вроде «Бананы», он дает мне «Invalid Response» Prompt. Любые идеи, как это исправить?Код не работает (Пытается использовать! = Правильно)

+1

Вы используете или неправильный путь вокруг - так, по крайней мере * один * из условий является ложным (ну, 'true' из-за не равно), все остальное также. – usr2564301

+0

Для начала '&&' имеет более высокий приоритет, чем '||'. –

+0

Возможно, это совсем не так, но грибы не растут из семян. – dreamlax

ответ

2

if(seedColor != "red" || seedColor != "Red" && seedColor != "blue" || seedColor != "Blue")

Это может быть легче переписать if для приемлемых цветов семян в первую очередь. Мы знаем, что такое хорошо, и для многих программистов, «хорошее» состояние, что проще всего представить себе:

if(seedColor == "red" || seedColor == "Red" || 
    seedColor == "blue" || seedColor == "Blue") 
{ 
    // this is a good seed color 
} 
else 
{ 
    // this is a bad seed color 
} 

Теперь, если вы действительно хотите, чтобы проверить на плохой цвет семян, чтобы повернуть его вокруг требует просто помещая ! на всем состоянии:

if(!(seedColor == "red" || seedColor == "Red" || 
    seedColor == "blue" || seedColor == "Blue")) 
{ 
    // this is a bad seed color 
} 
else 
{ 
    // this is a good seed color 
} 

Существует теорема называется Demorgan's Law: http://en.wikipedia.org/wiki/De_Morgan%27s_laws

Применяя его здесь даст следующее:

if (seedColor != "red" && seedColor != "Red" && 
    seedColor != "blue" && seedColor != "Blue") 
{ 
    // this is a bad seed color 
} 
else 
{ 
    // this is a good seed color 
} 

Другими словами, == превращаются в != и || превращаются в &&. Поэтому в основном мы использовали процесс 3-шага, чтобы придумать желаемые результаты, в соответствии с вашим вопросом относительно !=:

  1. Записывая «хорошее состояние»
  2. Дать плохое состояние просто not тин благих состояние.
  3. Примените закон Демангана, чтобы найти правильное использование !=.

Однако, я хотел бы предложить еще один способ сделать это, чтобы написать функцию, которая возвращает «ОК», если цвет семян хорошо:

bool seedColorOk(const std::string& sColor) 
{ 
    return seedColor == "red" || seedColor == "Red" || 
     seedColor == "blue" || seedColor == "Blue"; 
} 
//... 
if(!seedColorOk(seedColor)) 
{ 
    // this is a bad seed color 
} 
else 
{ 
    // this is a good seed color 
} 

Функция может быть настроена, не нарушая ваш оригинальный код.

2

Если seedColor является «красным», тогда seedColor! = «Красный» будет true.

Если seedColor является «Red», тогда seedColor! = «Red» будет true.

Если seedColor - это что-то еще, то seedColor! = "Red" и seedColor! = "Red" оба будут true.

Так что независимо от seedColor, выражение seedColor! = "Red" || seedColor! = «Красный» будет правдой. Подумайте, как вы должны объединить два подвыражения, чтобы получить то, что вы хотите.

И как уже упоминалось, & & имеет более высокий приоритет, чем ||, поэтому есть еще одна проблема для исправления.

0

Проблема не в основном вызвана отключением. =. Изучите приоритет логических операторов здесь: http://www.learncpp.com/cpp-tutorial/36-logical-operators/: D Вот «правильный» способ.(Если это ваш предполагаемый результат)

#include <iostream> 
#include <string> 

using namespace std; 


int main() 
{ 
//Get Seed Color 
string seedColor = ""; 
cout << "Enter Your Seed's Color: \n"; 
cin >> seedColor; 
// Get Temp 

if((seedColor != "red" && seedColor != "Red") && (seedColor != "blue" || seedColor != "Blue")) 
{ 
cout << "Invalid Response. Please enter Red or Blue for the Color.\n"; 
return 0; 
} 

int temp = 0; 
cout << "Enter Your Seed's Temperature: "; 
cin >> temp; 

// if Red Seed 
if(seedColor == "Red"|| seedColor == "red") 
{ 


//if temp >= 75 
if (temp >= 75) 
{ 

    // Get Soil Moisutre 
    string soilMoisture = ""; 
    cout << "Enter Your Soil's Moisture (Wet or Dry): "; 
    cin >> soilMoisture; 

    // Soil Dry Output Dandelion 
    if (soilMoisture == "Wet" || soilMoisture == "wet") 
    { 
     cout << "A Sunflower will grow!\n"; 
    } 

    if (soilMoisture == "Dry" || soilMoisture == "dry") 
    { 
     cout << "A Dandelion will grow!\n"; 
    } 
} 


else 
{ 
    // Otherwise Mushroom 
    cout << "You will have a Mushroom!"; 
} 



} 
// if Blue seed 
if (seedColor == "Blue" || seedColor == "blue") 
{ 


//if temp b/t 60 && 70 
if (temp >= 60 && temp <= 70) 
{ 
    // Get Soil Moisutre 
    string soilMoisture = ""; 
    cout << "Enter Your Soil's Moisture (Wet or Dry): "; 
    cin >> soilMoisture; 

    // Soil Dry Output Sunflower 
    if (soilMoisture == "Dry" || soilMoisture == "dry") 
    { 
     cout << "A Sunflower will grow!"; 
    } 
    // Soil Wet Output Dandelion 
    if (soilMoisture == "Wet" || soilMoisture == "wet") 
    { 
     cout << "A Dandelion will grow! \n"; 
    } 

} 
else 
{ 
    // Otherwise Mushroom 
    cout << "You will have a Mushroom! \n"; 
} 


} 
    return 0; 
} 
Смежные вопросы