尝试打印数组时出现总线错误和奇怪的输出
Getting bus error and weird outputs when trying to print 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文件的内容:
比洛克西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;
}
}
相关文章:
- 显示错误输出的简单数组排序程序
- Dijkstra 中的错误输出
- 自定义runtime_error,如果我在 #what 中使用#c_str(),则错误输出始终为空
- 流字符串错误输出
- C++ 异常处理错误输出
- C ++中的错误输出,i = 65530,当我们打印i的值时,它给出-6状态65530
- SSE和iostream:浮点类型的错误输出
- C++将 popen 错误输出读取为字符串
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- C++,向量:获得包含 0 的错误输出
- 数组函数错误输出
- CC1plus 错误:输出文件名指定两次
- 字符串错误输出
- 子斯特的错误输出
- 对大量c++错误输出完全一无所知.我认为这与预定义的函数和迭代器有关
- 简单程序的错误输出
- XCode调试器lldb中断,没有错误输出,但程序运行良好
- std::string::append(std::string)错误输出
- 查看大错误输出的顶行
- 使用结构的错误输出