2015-11-18 3 views
1

Я пытаюсь написать программу в C++ в Mac обрабатывать текстовый файл (table.txt), который имеет следующие данные:Сегментация Fault 11 в C++ текстовой обработки файла

Том 50 60 70,5
Джерри 80,3 65 91
Mark 75,2 77 92,7
Lucy 100 87,6 93

Однако то, что я получаю от работы его на терминале это, с ошибкой сегментации 11:

Том 50 60 70,5
Jerry 80,3 65 91
Mark 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; 
} 

Что именно проблема ?

+2

Вы только выделили место для 2-х баллов: 'двойной оценки [2],' но стараюсь читать 3: 'марок> > Student [index] .scores [2]; 'Доступ к массиву вне границ - это неопределенное поведение. –

ответ

0

В C, как и в большинстве современных языков программирования, индексирование массива начинается с 0, а число в замедлении - это размер, а не последний индекс. Так

double scores[2]; 

объявляет массив размером 2, с индексами 0 и 1.

+0

Да, это была глупая ошибка. Большое спасибо! – Michelle

+0

@ Michelle Обычный способ поблагодарить - это поддержать или принять – baruch

Смежные вопросы