2016-07-29 14 views
0

Ich bin nicht zu gut Programmierung, in der Tat habe ich bereits begonnen und gab mir Hausaufgaben, fühlen Sie sich frei zu sagen, ich bin ein Noob.Das Programm weigert sich, in die zweite Aussage zu gehen

Hier ist die Problemstellung:

Sie können eine der zwei Samen (blau oder rot) pflanzen Eine rote in eine Blume wachsen wird, wenn sie in Bodentemperaturen über 75 Grad gepflanzt, sonst ist es in einem Pilz wächst Unter der Annahme, dass die Temperatur die Bedingungen für den Anbau einer Blume erfüllt, werden die roten Samen in feuchtem Boden eine Sonnenblume produzieren und das Anpflanzen der roten Samen in trockenem Boden wird eine Dandiliom erzeugen. Ein blauer Samen wird in einer Blume, wenn in Bodentemps. von 60-70 F Grad. Oder es ist ein Pilz. in nassem Boden sein ein Löwenzahn in trockenen

Hier ist der Code:

*

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using namespace std; 
int main() 
{ 
    string plantedSeed = ""; 
    string seedColor = ""; 
    cout << "What color will the seed be? (red/blue): \n"; 
    getline(cin, seedColor); 
    int soilTemperature = 0; 
    cout << "What temperature will the soil have?\n"; 
    cin >> soilTemperature; 
    if (seedColor == "red") 
    { 
     if (soilTemperature >= 75) 
      plantedSeed = "mushroom"; 
     if (soilTemperature < 75) 
     { 
      string seedState = ""; 
      cout << "Enter the state of the soil in which the seed is plantet to (wet/dry)\n"; 
      getline(cin, seedState); 
      if (seedState == "wet") 
       plantedSeed = "sunflower"; 
      if (seedState == "dry") 
       plantedSeed = "dandelion"; 
     } 
    } 
    if(seedColor == "blue") 
    { 
     if (soilTemperature >= 60 && soilTemperature <= 70) 
      plantedSeed = "mushroom"; 
     else 
     { 
      string seedState = ""; 
      cout << "Enter the state of the soil in which the seed is plantet to (wet/dry)\n"; 
      getline(cin, seedState); 
      if (seedState == "wet") 
       plantedSeed = "dandelion"; 
      if (seedState == "dry") 
       plantedSeed = "sunflower"; 
     } 
    } 
    cout << "The planted seed has transformed into: " << endl; 
    cout << plantedSeed << endl; 
    system("pause"); 
    return 0; 
} 

* Das Problem ist, dass das Programm in die if (soilTemperature < 75) Erklärung weigert zu gehen

if (seedColor == "red") 
    { 
     if (soilTemperature >= 75) 
      plantedSeed = "mushroom"; 
     if (soilTemperature < 75) 
     { 
      string seedState = ""; 
      cout << "Enter the state of the soil in which the seed is plantet to (wet/dry)\n"; 
      getline(cin, seedState); 
      if (seedState == "wet") 
       plantedSeed = "sunflower"; 
      if (seedState == "dry") 
       plantedSeed = "dandelion"; 
     } 
    } 

es ist das gleiche für blau.

+0

Verwenden Sie String-Vergleichsfunktionen. –

Antwort

4

Sie müssen die \n nach dem Lesen Temperatur ignorieren:

cout << "What temperature will the soil have?\n"; 
cin >> soilTemperature; 
cin.ignore(); 

Nach der Lektüre Temperatur, Sie haben diese End-of-line in dem Standar-Eingang. Dann lesen Sie die Leerzeile in der folgenden getline. Natürlich liegen Sie falsch, das Programm kommt in die zweite Anweisung, aber getline endet direkt mit der leeren Zeile.

+0

Vielen Dank, Sie haben einen Neuling gerettet. – newbProgrammer

3

Dies ist ein häufiges Problem beim Mischen der Verwendung von std::getline und operator>> zum Lesen von std::cin. operator>> hat eine gewisse nuancierte Semantik, wenn es darum geht, Input zu verbrauchen und Whitespace zu überspringen.

Obwohl es möglich ist, dies richtig zu machen, ist es besser zu vermeiden, mit diesen Kopfschmerzen in erster Linie umzugehen.

Ersetzen Sie den Code, der die Temperatur mit std::getline in einer Zeichenfolge liest, genau wie alle anderen auch. Konstruieren Sie davon ein separates std::istringstream und verwenden Sie operator>> auf dem std::istringstream, um die Temperatur zu analysieren. Problem gelöst.

+0

Danke, aber ein einfaches cin.ignore(); rettete mich, obwohl ich nicht wusste, dass so etwas existiert, weiß ich jetzt. – newbProgrammer

Verwandte Themen