我的开关菜单在一段时间循环中出现问题



所以我正在研究 while 循环中的开关。而且它的行为不正常。当我选择"l"并加载文件时,它让我再次选择,然后当我尝试按"p"打印它时,它只是在选择提示上不断循环。我很确定这是因为选择 != 'q',但不知道如何解决它。

感谢您的任何帮助。

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
//create a struct called Weather
struct Weather {
    int month;
    int date;
    int high;
    int avg;
    int low;
    double precip;
    string event;
};
//function prototypes
int loadData(ifstream &file, Weather days[1000]);
void printData(Weather days[1000], int count);
int main() {    
    // declare variables
    Weather days[1000];
    ifstream inFile;
    string checker;
    char choice = '0';
    int month = 0, count;
    string path;
    cout << "Welcome to the weather analyzer!" << endl;

    while (choice != 'q') {
        cout << "Would you like to (l)oad data, (p)rint data, (s)earch data, (o)rder the data, or (q)uit? ";
        cin >> choice;
        cout << endl;
        switch (choice) {
        case 'l':
            // promt user for file path
            cout << "Please enter the file path: ";
            cin >> path;
            // open the file
            inFile.open(path);
            // checks to see if file successfully opened and terminates if not
            if (!inFile) {
                cout << "Bad Path";
                getchar();
                getchar();
                return 0;
            }
            loadData(inFile, days);
            count = loadData(inFile, days);
            break;
        case 'p':
            printData(days, count);
            break;
        case 's':
        case 'o':
        case 'q':
            cout << "Good bye!";
            break;
        default:
            cout << "Invalid option";
        }
    }
    // Close file.
    inFile.close();
    // Pause and exit.
    getchar();
    getchar();
    return 0;
}
//loading function
int loadData(ifstream &inFile, Weather days[1000]) {
    string checker;
    int month = 0;
    int i; //i varaiable keeps track of how many lines there are for the print function
    for (i = 0; !inFile.eof(); i++) {
        inFile >> days[i].date; // gets date and checks if it is 2017 with if loop
        if (days[i].date == 2017) {
            getline(inFile, checker);
            getline(inFile, checker);
            inFile >> days[i].date; //gets correct date value
            month++;//increments month counter
        }
        days[i].month = month;//gets and stores data from file into days
        inFile >> days[i].high
            >> days[i].avg
            >> days[i].low
            >> days[i].precip;
        getline(inFile, days[i].event);
    }
    return i; //returns amount of days 
}
// printing function
void printData(Weather days[1000], int count) {
    for (int i = 0; i < count; i++) {
        cout << days[i].month << " "
            << days[i].date << " "
            << days[i].high << " "
            << days[i].avg << " "
            << days[i].low << " "
            << days[i].precip << " "
            << days[i].event << " ";
        cout << endl;
    }
}

使用 cin 读取用户输入后,您可能想要刷新cin缓冲区:

cin.clear();
cin.ignore(INT_MAX);

最新更新