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

时间:2013-05-08 02:24:07

标签: c++ loops file-io fault

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

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 个答案:

答案 0 :(得分:0)

您在循环中的每次传递中递增pointerindex,而不是在您读取贡献金额之后。因此,当您在5006中阅读时,您有pointerindex == 3,这会导致carray[pointerindex]上的段错误。

++pointerindex移至else语句。