Моя программа читает текстовый файл по строкам, чтобы получить информацию о группе людей, которые сделали пожертвования. Он использует массив структур для хранения информации (имя, сумма пожертвования). В первой строке текстового файла указано количество участников. С тех пор строки обозначают имя и ценность пожертвования. например:Моя программа дает мне ошибку сегментации (C++)
3
Kyle Butler
10340
James Wright
5006
John Smith
10000
Затем, если их пожертвования 10000 или более, их название и значение донорства выводится на экран под заголовком «великие покровители» в противном случае, он появляется под заголовком «меценатов»
Проблема в том, что когда я запускаю программу, она дает мне ошибку сегментации без каких-либо доказательств, что программа выводит что-либо на экран. Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит? Я довольно новичок в языке.
#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;
}
Какая линия неисправна? Вы пытались запустить его в отладчике? Какую IDE, ОС вы используете? – OldProgrammer
вносить карри [вкладчики]; Ваш компилятор позволит вам это сделать? Не следует ли вносить свой вклад * carray = new contrib [contributers]; ? –
@JonathanHenson Нет, это не динамический массив, а всего лишь массив структур, я изначально использовал динамический массив, но я думал, что это может быть причиной segfault, поэтому я перешел на статический. Работает в любом случае. –