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

时间:2016-04-12 16:41:13

标签: c++ arrays

请原谅我对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文件的内容:

Biloxi 50000 52000 35000 44054 69 52 
Jackson 165000 168000 170000 172638 64 60 
Meridian 37000 38000 32000 40921 61 50 
Picayune 8000 9000 8500 10813 66 70 
Gulfport 80000 90000 110000 71012 69 55 

1 个答案:

答案 0 :(得分:0)

如果您必须使用数组,您可以将其填充为:

#define MAXIMUM_CITIES (5)

CityData tokyo;
CityData data_for_cities[MAXIMUM_CITIES];
// Example of "populating"
data_for_cities[0] = tokyo;

searching for "StackOverflow c++ read struct from file"已涵盖从文件中读取数据。

还在互联网上搜索&#34; c ++填充数组&#34;。

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

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;
  }
}