Спорадический бесконечный цикл во время do-while c ++ - PullRequest
0 голосов
/ 24 сентября 2019

Иногда, когда я запускаю программу, она работает отлично.Иногда я получаю бесконечный цикл, который просто продолжает отображать меню моего первого выбора.Я попытался найти ошибку, и я не мог понять это.Я думал, что в моем операторе ввода была ошибка, когда я получил menuChoice, но я не смог ее устранить.Должен ли я проверять значение menuChoice чаще?Чтобы лучше определить, я имею в виду второй цикл do-while, который повторяет выбор меню после каждой итерации.

main.cpp

#include <vector>
#include <fstream>
#include <iostream>
#include "course.hpp"
using namespace std; 


int main() {
    int menuChoice, searchMenuChoice;
    string fileName;
    string line;
    ifstream inStream;
    string searchName;
    string searchPrefix;
    int searchNum;
    vector<Course> courseList;
    vector<int> enrolledClasses;
    do{
        cout << "Please enter the file that contains othe course data: ";
        cin >> fileName;
        inStream.open(fileName);
    }while (!inStream.is_open());
    cout << endl;
    while (getline(inStream, line)){
        courseList.push_back(Course(line));
    }   
    cout << "Welcome to Banner NE, short for Never Existed!" << endl;
    do {
        cout << "\n"<< "---------------------------------------------" << endl;
        cout << "1 - List all available classes" << endl;
        cout << "2 - Search for a course" << endl;
        cout << "3 - View your current enrolled courses" << endl;
        cout << "4 - Enroll in course" << endl;
        cout << "5 - Exit" << endl;
        cout << "Make your selection here: ";
        cin >> menuChoice;
        cout << endl;
        if (menuChoice == 5){
            cout << "Thank you for using Banner NE and have a nice day!" << endl;
            return 0;
        }
        if (menuChoice == 2) {
            cout << endl;
            cout << "Would you like to search by" << endl;
            cout << "1 - Course number" << endl;
            cout << "2 - Available seats remaining" << endl;
            cout << "3 - Instructor name" << endl;
            cout << "4 - Course prefix" << endl;
            cout << "Make your selection: ";
            cin >> searchMenuChoice;
            if (searchMenuChoice == 2) {
                for (int i = 0; i < courseList.size(); i++){
                    if (courseList.at(i).getSeatsRemaining() > 0)
                        courseList.at(i).printCourse();
                }
            }
            if (searchMenuChoice == 1) {
                cout << "Please enter the course number: ";
                cin >> searchNum;
                for (int i = 0; i < courseList.size(); i++){
                    if (courseList.at(i).MatchesCourseNumberSearch(searchNum))
                        courseList.at(i).printCourse();
                        break;
                }
            }
            if (searchMenuChoice == 3) {
                cout << "Please enter the name of the instructor: ";
                cin >> searchName;
                for (int i = 0; i < courseList.size(); i++) {
                    if (courseList.at(i).MatchesInstructorSearch(searchName))
                            courseList.at(i).printCourse();
                } 
            }
            if (searchMenuChoice == 4){
                cout << "Please enter the prefix you would like to search for: ";
                cin >> searchPrefix;
                for (int x = 0; x < courseList.size(); x++)
                    if (courseList.at(x).MatchesPrefix(searchPrefix))
                        courseList.at(x).printCourse();
            }
        }
        if (menuChoice == 1) {
            for (int x = 0; x < courseList.size(); x++){
                cout << "ID: " << x << "\t";
                courseList.at(x).printCourse();
                cout << endl;
            }
        }
        if (menuChoice == 4) {
            int classEnrollment;
            cout << "Please enter the ID number of the class you would like to enroll: ";
            cin >> classEnrollment;
            if (courseList.at(classEnrollment).Enroll()){ 
                enrolledClasses.push_back(classEnrollment);
                cout << "You have enrolled in ID " << classEnrollment << endl;
            }
            else 
                cout << "There was not enough space, sorry." << endl;
        }

        if (menuChoice == 3){
            for (int i = 0; i < enrolledClasses.size(); i++){
                courseList.at(enrolledClasses.at(i)).printCourse();
                cout << endl;
            }
            if (enrolledClasses.size() == 0 )
                cout << "You are not currently enrolled in any classes." << endl;
        }
    } while (menuChoice != 5);

    return 0;
}
...