尝试打印数组时出现总线错误和奇怪的输出

Getting bus error and weird outputs when trying to print arrays

本文关键字:错误 输出 总线 打印 数组      更新时间:2023-10-16

请原谅我对C++的业余知识,但我有一个类的任务,我必须从city.dat文件中获取数据并将其排序为数组。然后我必须将数据打印到控制台。

当我运行代码时,我会得到一个"Segmentation fault:11"或一个随机字符的长字符串(包含我想要打印的内容),然后是一个"Bus error:10"。

这是我的代码粘贴箱:

/**
 *  @file cities_2_landon_haugh.cpp
 *  
 *  @brief Reads data from a datafile, sorts it, and prints it in the terminal in
 *      in a readable format.
 *
 *  @author Landon Haugh (landonh12)
 */
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct CITYDATA {
    string cityname[0];
    string pop1[0];
    string pop2[0];
    string pop3[0];
    string pop4[0];
    string temp[0];
    string rain[0];
};
CITYDATA *data = new CITYDATA();
void readDataFile();
void sortData();
void printData();
string input[0];
int main() {
    readDataFile();
    sortData();
    printData();
    return 0;
}
/**
 *  This function reads a data file and adds its elements to an array.
 *
 *  @param None.
 *  @return Void.
 */
void readDataFile() {
    ifstream fin;
    fin.open("city.dat");
    int i = -1;
    while(true) {
        i = i + 1;
        if(fin.fail()) break;   
        fin >> input[i];                        
    }
    fin.close();
}
void sortData() {

    int j = 0;
    int k = 0;
    for(int i = 0; i < sizeof(input)/sizeof(input[0]); i++) {
        j = j + 1;
        if(j == 7) {
            j = 0;
            k = k + 1;
        }
        if(j == 0) {
            data->cityname[k] = input[i];
        } if(j == 1) {
            data->pop1[k] = input[i];
        } if(j == 2) {
            data->pop2[k] = input[i];
        } if(j == 3) {
            data->pop3[k] = input[i];
        } if(j == 4) {
            data->pop4[k] = input[i];
        } if(j == 5) {
            data->temp[k] = input[i];
        } if(j == 6) {
            data->rain[k] = input[i];
        }
    }

}

void printData() {
    for(int i = 0; i < 7; i++) {
        cout << data->cityname[i];
        cout << data->pop1[i];
        cout << data->pop2[i];
        cout << data->pop3[i];
        cout << data->pop4[i];
        cout << data->temp[i];
        cout << data->rain[i];
    }
}

这是在我尝试用指针创建CITYDATA的实例之后。

以下是city.dat文件的内容:

比洛克西50000 52000 35000 44054 69 52杰克逊165000 168000 170000 172638 64 60子午线37000 38000 32000 40921 61 50Picayune 8000 9000 8500 10813 66 70Gulfport 80000 90000 110000 71012 69 55

如果必须使用数组,则可以像以下方式填充它:

#define MAXIMUM_CITIES (5)
CityData tokyo;
CityData data_for_cities[MAXIMUM_CITIES];
// Example of "populating"
data_for_cities[0] = tokyo;

通过搜索"StackOverflow c++从文件读取结构",已经涵盖了从文件读取数据。

同时在互联网上搜索"c++填充数组"。

我建议您在CityData的实例中重载operator>>以进行读取
您的输入循环(从文本文件填充数组)看起来像这样:

CityData datum;
CityData data_for_cities[MAXIMUM_CITIES];
unsigned int index = 0U;
while (input_file >> datum)
{
  if (index < MAXIMUM_CITIES)
  {
    data_for_cities[index] = datum;
    ++index;
  }
}