我的程序给我一个分割错误(c++)

My program is giving me a segmentation fault (c++)

本文关键字:一个 错误 c++ 分割 程序 我的      更新时间:2023-10-16

我的程序逐行读取一个文本文件,以获取一组捐款人的信息。它使用一个结构数组来存储信息(姓名、捐赠金额)。文本文件的第一行是贡献者的数量。从那时起,这些线代表了捐赠的名称和价值。如:

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;
}

您是在每次通过循环时递增pointerindex,而不是在读取贡献金额之后才递增。所以当你读到5006的时候,你有pointerindex == 3,这会导致carray[pointerindex]的段故障。

++pointerindex移到else语句中

相关文章: