基于用户输入搜索结构化数组 我是一个初学C++的学生,我目前正试图围绕数组进行思考。我有一个任务,需要从csv文件中读取数据,将其存储到结构化数组中,然后要求用户输入城市名称。基于此城市名称,我需要输出此城市的信息。当我输入城市名称时,我的问题出现了,我得到了错误的信息。我好像就是做不好。如果您能就此提供任何指导,并解释我的错误所在,我们将不胜感激

基于用户输入搜索结构化数组 我是一个初学C++的学生,我目前正试图围绕数组进行思考。我有一个任务,需要从csv文件中读取数据,将其存储到结构化数组中,然后要求用户输入城市名称。基于此城市名称,我需要输出此城市的信息。当我输入城市名称时,我的问题出现了,我得到了错误的信息。我好像就是做不好。如果您能就此提供任何指导,并解释我的错误所在,我们将不胜感激,c++,structure,C++,Structure,csv文件上的小信息块: State,City,FAA,IATA,ICAO,Airport,Role,Enplanements ALABAMA,Birmingham,BHM,BHM,KBHM,Birmingham–Shuttlesworth International Airport,S,1335215 ALABAMA,Dothan,DHN,DHN,KDHN,Dothan Regional Airport,N,48423 ALABAMA,Huntsville,HSV,HSV,KHSV,Hunts

csv文件上的小信息块:

State,City,FAA,IATA,ICAO,Airport,Role,Enplanements
ALABAMA,Birmingham,BHM,BHM,KBHM,Birmingham–Shuttlesworth International Airport,S,1335215
ALABAMA,Dothan,DHN,DHN,KDHN,Dothan Regional Airport,N,48423
ALABAMA,Huntsville,HSV,HSV,KHSV,Huntsville International Airport (Carl T. Jones Field),S,505541
ALABAMA,Mobile,MOB,MOB,KMOB,Mobile Regional Airport,N,287661
ALABAMA,Montgomery,MGM,MGM,KMGM,Montgomery Regional Airport (Dannelly Field),N,157958
这是我到目前为止写的:

#include <iostream>
#include <iomanip>
#include <cstring>
#include <string>
#include <fstream>
using namespace std;

struct airplane_Data
{
    string state;
    string city;
    string faa;
    string iata;
    string icao;
    string airport_Name;
    string role;
    string enplanements;
};

const int C = 8; // Columns: Name of sections
const int MAX = 350; //Rows: 348 Airports

int main()
{
    bool reset;
    int menu;
    string input;
    ifstream read_Data;
    airplane_Data airplane[C][MAX];

    do
    {
    reset = true;
    read_Data.open("Airports.csv");

    if ("Airports.csv")
    {
        cout << "File \"Airports.csv\" opened successfully. ";
        cout << endl;
        system("pause"); system("cls");
    }
        if (!"Airports.csv")
        {
            cout << "Error Openning \"Airports.csv\"";
            cout << endl;
            system("pause"); exit(0);
        }

        cout << "---------------Main Menu---------------" << endl << endl;
        cout << "1.Search for airport by city name." << endl;
        cout << "2.Exit Program" << endl << endl;

        cout << "Please select a choice for the menu above: "; 
        cin >> menu; 
        cin.ignore();

        //Store data into a Structured Array
        for (int a = 0; a < C; a++)
        {
            for (int i = 0; i < MAX; i++)
            {
                getline(read_Data, airplane[a][i].state, ',');
                getline(read_Data, airplane[a][i].city, ',');
                getline(read_Data, airplane[a][i].faa, ',');
                getline(read_Data, airplane[a][i].iata, ',');
                getline(read_Data, airplane[a][i].icao, ',');
                getline(read_Data, airplane[a][i].airport_Name, ',');
                getline(read_Data, airplane[a][i].role, ',');
                getline(read_Data, airplane[a][i].enplanements, ',');
            }
        }

        switch (menu)
        {
        case 1:
            for (int a = 0; a < C; a++)
            {
                for (int i = 1; i < MAX; i++)
                {

                    cout << "Enter city name to find information on an airport: ";
                    getline(cin, airplane[a][i].city);

                    cout << "Here is information on the cities airport." << endl << endl;

                    cout << left << setw(15) << "State: " << airplane[a][i].state << endl;
                    cout << left << setw(15) << "City: " << airplane[a][i].city << endl;
                    cout << left << setw(15) << "FAA Code: " << airplane[a][i].faa << endl;
                    cout << left << setw(15) << "IATA Code: " << airplane[a][i].iata << endl;
                    cout << left << setw(15) << "ICAO Code: " << airplane[a][i].icao << endl;
                    cout << left << setw(15) << "Airport Name: " << airplane[a][i].airport_Name << endl;
                    cout << left << setw(15) << "Role: " << airplane[a][i].role << endl;
                    cout << left << setw(15) << "Enplanements: " << airplane[a][i].enplanements << endl;

                }
            }
        }

    } while (reset == true);

    read_Data.close();

    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构数据
{
字符串状态;
字符串城市;
线状faa;
国际航空运输协会;
国际民航组织;
字符串名称;
字符串角色;
弦式飞机;
};
常数int C=8;//列:节的名称
常数int MAX=350//世界其他地区:348个机场
int main()
{
布尔重置;
int菜单;
字符串输入;
IFU流读取数据;
飞机和数据飞机[C][MAX];
做
{
重置=真;
读取数据。打开(“Airports.csv”);
如果(“Airports.csv”)
{

cout问题在于您没有正确读取
Enplanements
字段。它以一个换行符而不是逗号结尾,因为它是行中的最后一个字段。结果是,您读取的内容超过了换行符,并且包括了下一行的城市名称。在第二行,您将城市名称读取到state字段中,并且您将每条线路上都有更多的不同步

将该行更改为:

getline(read_Data, airplane[a][i].enplanements, '\n');

有关更多想法,请参见“
if(“Airports.csv”)
”和“
if(!”Airports.csv”)
“不要做你认为他们会做的事。你想使用
if(read_Data.is_open())
。也没有必要在您的
每次迭代时重新打开文件。请不要发布文本图片,发布文本。不要使用屏幕截图。提供csv的示例输入,然后快速查看,您将获得一个最小的示例,供有时间帮助的人使用!我不确定您是否正在阅读csv数据正确-您正在为每个列字段调用getline,而事实上getline将读取整行。您是否在调试器中遍历了此代码?@auburg它将
指定为行分隔符,因此它只读取一列。