циклы — моя программа выдает ошибку сегментации (c ++)

Моя программа читает текстовые файлы построчно, чтобы получить информацию о группе людей, которые сделали пожертвования. Он использует массив структур для хранения информации (имя, сумма пожертвования). Первая строка текстового файла — количество участников. С тех пор строки представляют название и стоимость пожертвования. например:

3
Kyle Butler
10340
James Wright
5006
John Smith
10000

Затем, если их пожертвование составляет 10 000 или более, их имя и стоимость пожертвования выводятся на экран под заголовком «великие покровители», в противном случае оно появляется под заголовком «покровители»

Проблема в том, что когда я запускаю программу, она вызывает ошибку сегментации без каких-либо доказательств того, что программа выводит что-либо на экран. Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит? Я довольно плохо знаком с языком.

#include <iostream>
#include <string>
#include <fstream>
#include <cstring>
#include <cctype>
#include <cstdlib>

using namespace std;

struct contribute {
char Name[100];
int contribution;
};

int main()
{

char tempstore[100];
int linecount=1;
int pointerindex=0;
ifstream inputfile("myfile.txt");

if (!inputfile.is_open()){
cout << "Error opening file";
}

inputfile.getline(tempstore, 20);
int contributors = atoi(tempstore);
contribute carray[contributors];

while (!inputfile.eof()){
if(linecount ==1){
linecount++;
continue;
}

inputfile.getline(tempstore, 20);if ((linecount % 2) == 0){
strcpy( (carray[pointerindex]).Name, tempstore);

}
else {
(carray[pointerindex]).contribution = atoi(tempstore);
}++linecount;
++pointerindex;
}cout << "\n#####--#-Grand Patrons-#--#####\n";

for (int i=0; i<contributors; i++){
if (carray[i].contribution >= 10000){
cout << "Name:  " << carray[i].Name << endl;
cout << "Contribution:  " << carray[i].contribution << endl << endl;
}
}

cout << "\n#####--#-Patrons-#--#####\n";

for (int d=0; d<contributors; d++){
if (carray[d].contribution < 10000){
cout << "Name:  " << carray[d].Name << endl;
cout << "Contribution:  " << carray[d].contribution << endl << endl;
}
}

inputfile.close();

return 0;
}

-1

Решение

Вы увеличиваете pointerindex на каждом проходе через цикл, а не только после того, как вы прочитали суммы взносов. Так что к тому времени, когда вы начинаете читать 5006, у тебя есть pointerindex == 3, который вызывает segfault на carray[pointerindex],

Переехать ++pointerindex в else заявление.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]