C++处理文本文件中的Segmentation Fault 11
Segmentation Fault 11 in C++ processing text file
我正在尝试在 Mac 中用 C++ 编写程序来处理具有以下数据的文本文件 (table.txt):
Tom 50 60 70.5
Jerry 80.3 65 91
Mark 75.2 77 92.7
Lucy 100 87.6 93
但是,我在终端上从 运行 得到的是这样的,分段错误 11:
Tom 50 60 70.5
Jerry 80.3 65 91
Mark 75.2 77 92.7
Segmentation fault: 11
这是我的程序:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct StudentList {
string name;
double scores[2];
};
int main() {
ifstream marks;
marks.open("table.txt");
StudentList Student[50];
int index = 0;
string text;
if (marks.fail()) {
cout << "fail open" << endl;
}
while (marks >> text) {
cout << text << " ";
Student[index].name = text;
marks >> Student[index].scores[0];
cout << Student[index].scores[0] << " ";
marks >> Student[index].scores[1];
cout << Student[index].scores[1] << " ";
marks >> Student[index].scores[2];
cout << Student[index].scores[2] << " ";
cout << endl;
index++;
cout << index << endl;
}
marks.close();
return 0;
}
到底是什么问题?
在 C 中,与大多数现代编程语言一样,数组索引从 0 开始,减速中的数字是大小,而不是最后一个索引。所以
double scores[2];
声明一个大小为 2、索引为 0 和 1 的数组。
我正在尝试在 Mac 中用 C++ 编写程序来处理具有以下数据的文本文件 (table.txt):
Tom 50 60 70.5
Jerry 80.3 65 91
Mark 75.2 77 92.7
Lucy 100 87.6 93
但是,我在终端上从 运行 得到的是这样的,分段错误 11:
Tom 50 60 70.5
Jerry 80.3 65 91
Mark 75.2 77 92.7
Segmentation fault: 11
这是我的程序:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct StudentList {
string name;
double scores[2];
};
int main() {
ifstream marks;
marks.open("table.txt");
StudentList Student[50];
int index = 0;
string text;
if (marks.fail()) {
cout << "fail open" << endl;
}
while (marks >> text) {
cout << text << " ";
Student[index].name = text;
marks >> Student[index].scores[0];
cout << Student[index].scores[0] << " ";
marks >> Student[index].scores[1];
cout << Student[index].scores[1] << " ";
marks >> Student[index].scores[2];
cout << Student[index].scores[2] << " ";
cout << endl;
index++;
cout << index << endl;
}
marks.close();
return 0;
}
到底是什么问题?
在 C 中,与大多数现代编程语言一样,数组索引从 0 开始,减速中的数字是大小,而不是最后一个索引。所以
double scores[2];
声明一个大小为 2、索引为 0 和 1 的数组。