2017-04-03 4 views
1

Ich habe Probleme, diese Aufgabe für meine Klasse für ein paar Tage zu tun, und möchte etwas Hilfe.C++ - Schleifen und boolesche Ausdrücke

Die Aufgabe besteht darin, ein Programm zu schreiben, das den Benutzer auf der Grundlage seiner Hoch- und Gewichtsqualifikation abhängig von seinem Geschlecht über seinen Akzeptanzstatus informiert.

Am Ende des Programms möchte es die Anzahl der Kandidaten, die akzeptiert wurden, und den Durchschnitt der akzeptierten Kandidaten für die Gesamtzahl der Kandidaten ausgeben.

Zuordnung - https://www.saddleback.edu/faculty/slinker/CS1A/CS1A_Fall2013/Assignment8.pdf

Wir nicht Schalter, bedingte Operatoren verwenden können und die Auswahl (nur für die richtige Botschaft an die Ergebnisse ausgibt). Wir können nur Loops verwenden und komplexe Boolesche Ausdrücke

Die Probleme, die ich habe, ist:

  1. Wenn alle 3 meiner Eingänge gültig sind, warum sind sie die Ausgabe nicht, wenn sie akzeptiert werden und wenn einer von die Eingabe (Höhe oder Gewicht) oder beide wurden abgelehnt, warum gibt sie es nicht aus? Ist meine boolesche Variable falsch? Wenn ja, wie repariere ich es?

  2. Warum kann ich die Schleife/das Programm nicht verlassen, wenn ich X eingebe? Ist meine While-Schleife korrekt oder nicht?

  3. Gibt es irgendwelche Auswahlanweisungen, die ich in "Nicht-Auswahlanweisungen" ändern kann?

Hier ist mein Code

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

int main() 
{ 

    char gender; 
    int height; 
    int weight; 
    bool heightOK; 
    bool weightOK; 
    int candidateCount; 
    int validCandidateCount; 
    bool invalidGender; 
    bool invalidHeight; 
    bool invalidWeight; 
    float percentOutput; 

    candidateCount = 0; 
    validCandidateCount = 0; 

    cout << "Please enter the candidate's information (enter 'X' to exit)." 
    << endl; 

    do 
    { 
     cout << "Gender: "; 
     cin.get(gender); 

     cin.ignore (1000,'\n'); 
     invalidGender = (!(gender == 'm' || 
          gender == 'M' || 
          gender == 'f' || 
          gender == 'F')); 

     candidateCount = candidateCount + 1; 

     if(invalidGender) 
     { 
      cout << "***** Invalid gender; please enter M or F*****" <<  endl; 
     } 

    }while(invalidGender); 

    while (gender != 'X' || gender != 'x') 
    { 
     candidateCount = candidateCount + 1; 

     do 
     { 
      cout << "Height: "; 
      cin >> height; 

      invalidHeight = height < 24 || height > 110; 

      heightOK = ((gender == 'm' || gender == 'M') && 
         (height > 65 && height < 80)); 

      heightOK = heightOK || ((gender == 'f' || gender == 'F') && 
            (height > 62 && height < 75)); 

      if(invalidHeight) 
      { 
       cout << "***** Invalid height; please enter a height in inches between 24 and 110. *****" 
        << endl; 
      } 

     }while(invalidHeight); 


     do 
     { 
     cout << "Weight: "; 
     cin >> weight; 

     invalidWeight = weight < 50 || weight > 1400; 

     weightOK = ((gender == 'm' || gender == 'M') && 
         (weight > 130 && weight < 250)); 

     weightOK = weightOK || ((gender == 'f' || gender == 'F') && 
        (weight > 110 && weight < 185)); 

     if(invalidWeight) 
      { 

       cout << "***** Invalid weight; please enter a weight in lbs between 50 and 1400." 
        << endl; 
      } 

     }while(invalidWeight); 



     if(heightOK && weightOK) 
     { 
      cout << "This candidate has been ACCEPTED!" << endl; 

      validCandidateCount = validCandidateCount + 1; 
     } 
     else if (!heightOK) 
     { 
      cout << "This candidate has been rejected based on the HEIGHT requirement." 
       << endl; 
     } 
     else if (!weightOK) 
     { 
      cout << "This candidate has been rejected based on the WEIGHT requirement." 
       << endl; 
     } 
     else if (!(heightOK && weightOK)) 
     { 
      cout << "This candidate has been rejected based on the HEIGHT and WEIGHT requirements" 
       << endl; 
     } 
     do 
     { 
      cout << "Gender: "; 
      cin.get(gender); 
      cin.ignore (1000,'\n'); 

      candidateCount = candidateCount + 1; 

      if(invalidGender) 
      { 
      cout << "***** Invalid gender; please enter M or F*****" <<  endl; 
      } 
     }while(invalidGender); 


    } 

    cout << validCandidateCount << " candidate(s) accepted!" << endl; 

    percentOutput = validCandidateCount/candidateCount; 

    cout << "That's " << percentOutput <<"%!" << endl; 



return 0; 
} 
+1

ich eine schlechte Nachricht bekommen habe. Zusätzlich zu irgendwelchen Fehlern scheint Ihre Tastatur defekt zu sein. Die TAB-Taste funktioniert nicht richtig. Infolgedessen weist der gezeigte Code keine logische sinnvolle Einrückung auf und ist größtenteils nicht lesbar. Sie müssen Ihre Tastatur reparieren lassen. Wenn Sie schließlich nach anderen fragen, die Ihnen bei der Behebung Ihrer Programmierprobleme helfen, müssen Sie zumindest etwas Aufwand betreiben, um Ihren Code so leicht lesbar wie möglich zu machen, indem Sie logische Einrückungen vornehmen. Wenn Sie nicht einmal versuchen, Ihren Code korrekt einzurücken, warum sollte Ihnen jemand weiterhelfen? –

+0

@SamVarshavchik Ist es jetzt behoben? Ist dir nicht aufgefallen, dass du den Tab beim Buchen nicht verwenden kannst. Also habe ich gerade 4 Plätze gemacht. –

+0

Wo haben Sie 'invalidGender' deklariert? Wenn ich deinen Code ausführe, gibt der Compiler mir den Fehler: '|| === Build-Datei:" kein Ziel "in" kein Projekt "(Compiler: unbekannt) === | || In der Funktion 'int main()': || 31 | error: 'invalidGender' wurde in diesem Bereich nicht deklariert || 42 | error: 'invalidGender' wurde in diesem Bereich nicht deklariert | || === Build fehlgeschlagen: 2 Fehler, 0 Warnung (en) (0 Minute (n), 1 Sekunde (n)) === | ' ' –

Antwort

1

Der Haupt while-Schleife sollte und Zustand.

while(gender !='X' && gender!='x) 

Und Ihr Auswahlcode hat falsche bedingte Anweisungen.

if(heightOK && weightOK) 
    { 
     cout << "This candidate has been ACCEPTED!" << endl; 

     validCandidateCount = validCandidateCount + 1; 
    } 
    else if (!heightOK) // you have written else if(heightOK) 
    { 
     cout << "This candidate has been rejected based on the HEIGHT requirement." 
      << endl; 
    } 
    else if (!weightOK) // you have written else if(weightOK) 
    { 
     cout << "This candidate has been rejected based on the WEIGHT requirement." 
      << endl; 
    } 
    else if (!(heightOK && weightOK)) 
    { 
     cout << "This candidate has been rejected based on the HEIGHT and WEIGHT requirements" 
      << endl; 
    } 

Sie sollten diese invalidgender Zustand in der letzten do while-Schleife entfernen, sonst wird es zu einer Endlosschleife führen, auch wenn Sie durch Drücken der Taste X. Anstelle der ungültigen Geschlecht Bedingung kann an den Start gebracht werden verlassen wollen von Haupt While-Schleife.

Und invalidGender-Variable sollte wieder ihren Wert zugewiesen werden andernfalls wird es den zuvor gespeicherten Wert übernehmen.

invalidGender = (!(gender == 'm' || 
         gender == 'M' || 
         gender == 'f' || 
         gender == 'F')); 

der gesamte Code

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

int main() 
{ 

char gender; 
int height; 
int weight; 
bool heightOK; 
bool weightOK; 
int candidateCount; 
int validCandidateCount; 
bool invalidGender; 
bool invalidHeight; 
bool invalidWeight; 
double percentOutput; 

candidateCount = 0; 
validCandidateCount = 0; 

cout << "Please enter the candidate's information (enter 'X' to exit)." 
<< endl; 

    cout << "Gender: "; 
    cin.get(gender); 

while (gender != 'X' && gender != 'x') 
{ 
    candidateCount = candidateCount + 1; 

    do 
    { 
     invalidGender = (!(gender == 'm' || 
         gender == 'M' || 
         gender == 'f' || 
         gender == 'F')); 

     if(invalidGender) 
     { 
      cout << "***** Invalid gender; please enter M or F*****" <<  endl; 
      cout << "Gender: "; 
      cin>>gender; 
      cin.ignore (1000,'\n'); 
     } 
    }while(invalidGender); 

    do 
    { 
     cout << "Height: "; 
     cin >> height; 

     invalidHeight = height < 24 || height > 110; 

     heightOK = ((gender == 'm' || gender == 'M') && 
        (height > 65 && height < 80)); 

     heightOK = heightOK || ((gender == 'f' || gender == 'F') && 
           (height > 62 && height < 75)); 

     if(invalidHeight) 
     { 
      cout << "***** Invalid height; please enter a height in inches between 24 and 110. *****" 
       << endl; 
     } 

    }while(invalidHeight); 


    do 
    { 
    cout << "Weight: "; 
    cin >> weight; 

    invalidWeight = weight < 50 || weight > 1400; 

    weightOK = ((gender == 'm' || gender == 'M') && 
        (weight > 130 && weight < 250)); 

    weightOK = weightOK || ((gender == 'f' || gender == 'F') && 
       (weight > 110 && weight < 185)); 

    if(invalidWeight) 
     { 

      cout << "***** Invalid weight; please enter a weight in lbs between 50 and 1400." 
       << endl; 
     } 

    }while(invalidWeight); 



    if(heightOK && weightOK) 
    { 
     cout << "This candidate has been ACCEPTED!" << endl; 

     validCandidateCount = validCandidateCount + 1; 
    } 
    else if (!heightOK) 
    { 
     cout << "This candidate has been rejected based on the HEIGHT requirement." 
      << endl; 
    } 
    else if (!weightOK) 
    { 
     cout << "This candidate has been rejected based on the WEIGHT requirement." 
      << endl; 
    } 
    else if (!(heightOK && weightOK)) 
    { 
     cout << "This candidate has been rejected based on the HEIGHT and WEIGHT requirements" 
      << endl; 
    } 


     cout << "Gender: "; 
     cin>>gender; 
     cin.ignore (1000,'\n'); 

} 

cout << validCandidateCount << " candidate(s) accepted!" << endl; 

percentOutput = (double)validCandidateCount/(double)candidateCount; 

cout << "That's " << percentOutput*100 <<"%!" << endl; 



return 0; 
} 
+0

Hallo Chandini, danke für die Antwort. Ich habe die InvalidGender-Variablen-Zuweisung erneut in der 2. Gender-Eingabe (letzte Do-While) hinzugefügt, aber ich verstehe nicht, wo ich die ungültige Geschlechtsbedingung von der letzten während der Haupt-while setzen sollte. –

+0

Wenn ich die ungültige Bedingung in der letzten tun während while, was füge ich stattdessen? Denn ich kann die While-Bedingung nicht verlassen, während ich leer bin. Und wie füge ich es zum Anfang der While-Schleife hinzu? –

+0

Okay, habe ich das aber jetzt mein Programm beendet, nachdem ich –