2016-10-20 3 views
0

für einige mag dies einfach scheinen, aber für mich kann ich nicht wirklich scheinen, herauszufinden, warum das nicht funktioniert. Ich weiß, dass ich jedes Mal innerhalb der while-Schleife kopieren und einfügen kann, um das gewünschte Ergebnis zu erhalten, aber mir wurde gesagt, dass wenn man etwas mehr als einmal wiederholen muss, um eine Funktion zu schreiben! Mein Code wird die Nummer doppelt drucken und obwohl jemand 8 eingeben würde, wird es trotzdem in die While-Schleife gehen. Hoffe, dass jemand erklären kann, warum mir das passiert.Funktion für Validierung Eingabe C++ einfach

int main() 
{ 
int option = selectionHelper(); 
cout << selectionHelper() << endl; 
cout << endl; 
if(option == 8) 
{ 
    cout << "Exiting program..." << endl; 
    cout << endl; 
    cin >> option; 
} 
while (option != 8) 
{ 
if (option == 1){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else if(option == 2){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else if(option == 3){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else if(option == 4){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else if(option == 5){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else if(option == 6){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else if(option == 7){ 

    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}else{ 
    cout << "Invalid input... Please try again..." << endl; 
    cout << endl; 
    cout << selectionHelper() << endl; 
    cout << endl; 
    cin >> option; 
}//end else if statement 
}//end while loop 

}//end function main 

und jetzt meine Funktion:

int selectionHelper() 
{ 
int option; 
cout << "1. Initialize seating for new performance." << endl; 
cout << "2. View seating chart." << endl; 
cout << "3. Reserve seats." << endl; 
cout << "4. Calculate tickets remaining in row." << endl; 
cout << "5. Calculate tickets remaining in theater." << endl; 
cout << "6. Calculate total tickets sold." << endl; 
cout << "7. Calculate ticket sales." << endl; 
cout << "8. Exit program." << endl; 
cout << "Option: " << endl; 
cin >> option; 
return option; 
}//end selectionHelper 

Vielen Dank für auf meinem Posten suchen!

Antwort

0

Diese Antwort und andere werden Ihnen sagen, welchen Code zu schreiben, um Ihr Problem zu beheben. Wenn Sie in Zukunft auf ähnliche Probleme stoßen sollten, versuchen Sie, mit einem Debugger durch Ihren Code zu gehen. (Erfahrung hilft auch.) In Bezug auf Code-Redundanz: Erstens ist es gut, dass Sie die selectionHelper() -Methode verwendet haben. Das zeigt, dass Sie gute Instinkte haben. Hier können Sie weitere Schritte ausführen:

  1. Suchen Sie nach Codezeilen, die identisch sind oder sich nur durch eine Variable unterscheiden.
  2. halten sie auf folgende Weise Kondensieren
    • Können Sie eine for-Schleife verwenden?
    • Können Sie den Code in eine Methode einfügen (möglicherweise eine Variable abstrahieren?)
    • Können Sie eine breitere bedingte Anweisung verwenden? (Das ist, was Sie haben, denn hier los: Wenn eine Zahl 1, 2, 3, 4, 5, 6 oder 7, ist es auch> 0 und < 7. Deshalb haben wir Bereiche haben.)

Das Programm läuft weiter, wenn sie 8 eingeben, weil Sie nach Eingabe von 8 eine Zahl eingeben müssen! Also Ihr erstes Stück Code kann einfacher sein:

int option = selectionHelper(); 
cout << option << endl <<endl; // <-- output option, don't call selectionHelper() here again, that's why you get double printing 
if(option == 8) 
{ 
    cout << "Exiting program..." << endl; 
    cout << endl; 
    //cin >> option; // <-- don't input here again! 
} 

Der Schlüssel hier Ihren Code zu vereinfachen ist zu erkennen, dass Sie nur verschiedene Codes in einigen Fällen schreiben. So, hier ist Ihre while Schleife:

while (option != 8) 
{ 
    if (option > 0 && option < 8){ 

     cout << selectionHelper() << endl; 
     cout << endl; 
     cin >> option; 
    }else{ 
     cout << "Invalid input... Please try again..." << ends << endl; 
     cout << selectionHelper() << endl << endl; 
     cin >> option; 
    }//end else if statement 
} 
0

Sie müssen Ihren Code auf folgende Weise ändern:

int option = selectionHelper(); 
cout << option << endl; 

Und auch:

if(option == 8) 
{ 
    cout << "Exiting program..." << endl; 
} 

Sie Ihren Code vereinfachen kann bis zu (teilweise die Vereinfachung unter Verwendung gemacht von cuniculus sondern auch die Festsetzung Fehler in Ihrem eigenen Code falsch mit option):

#include <iostream> 
using namespace std; 

int selectionHelper() 
{ 
int option; 
cout << "1. Initialize seating for new performance." << endl; 
cout << "2. View seating chart." << endl; 
cout << "3. Reserve seats." << endl; 
cout << "4. Calculate tickets remaining in row." << endl; 
cout << "5. Calculate tickets remaining in theater." << endl; 
cout << "6. Calculate total tickets sold." << endl; 
cout << "7. Calculate ticket sales." << endl; 
cout << "8. Exit program." << endl; 
cout << "Option: " << endl; 
cin >> option; 
return option; 
}//end selectionHelper 

int main() 
{ 
int option = selectionHelper(); 
while (option != 8) 
{ 
    if (option > 0 && option < 8){ 
     option = selectionHelper(); 
    }else{ 
     cout << "Invalid input... Please try again..." << ends << endl; 
     option = selectionHelper(); 
    }//end else if statement 
} 
cout << "Exiting program..." << endl; 
return 0; 
}//end function main 

Ihr Fehler bestand darin, selectionHelper zu oft aufzurufen, wenn nur einmal die Variable option gesetzt werden muss. Sie haben eine ähnliche Sache in Ihrer gesamten if-else-Struktur - aber ich überlasse es Ihnen, dies zu beheben, falls nötig, ist die Lösung die gleiche.

+0

Dies half mir auch zu sehen, welcher Teil des Codes den Fehler verursacht hat. Danke für die Antwort auf meinen Beitrag! – Austin

+0

Großartig.Bitte upvote die Antworten, die Sie nützlich finden (klicken Sie auf den nach oben gerichteten Pfeil links von der Antwort). –