Я пытаюсь написать программу на C ++ в Mac для обработки текстового файла (table.txt), который содержит следующие данные:
Том 50 60 70,5
Джерри 80,3 65 91
Марк 75,2 77 92,7
Люси 100 87,6 93
Однако, что я получаю от запуска его на терминале, это с ошибкой сегментации 11:
Том 50 60 70,5
Джерри 80,3 65 91
Марк 75,2 77 92,7
Ошибка сегментации: 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.
Других решений пока нет …