从文件中读取时崩溃

时间:2014-12-02 08:36:15

标签: c++ arrays file crash

首先,我希望你知道我是一名大学生(我们的编程课程大纲还没有那么高级)(顺便说一句,我不是要求我的作业答案等,我只是练习)。

好的,我有2个问题

  1. 我的代码中的某些函数会更改我的数组的值(当我不想要它时)
  2. 我真的不知道,但似乎从文件中获取一些值存储到我的数组中会使程序崩溃,而且,在对代码进行了一些调整后(我不知道改变了什么),它不再崩溃在上述部分,但它仍然在代码执行结束时崩溃..
  3. 我希望你们能帮助我,我一整天都在寻找。

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <iomanip>
    
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    void readFile (float x[], int &y) {
        ifstream load;
        string filename;
        cout << "Enter the name of the file: ";
        cin >> filename;
    
        load.open(filename.c_str());
        while (!load.eof()) {
            load >> x[y];
            y++;
        }
        if (!load) {
            cout << "asd";
        }
    
    }
    
    void computeC (float x[], int y, float z[]) {
        int v=0;
    
        for (v=0; v<=y; v++) {
            z[v] = (5 * (x[v] - 32)/9);
        }
    }
    
    float average (float x[], int y) {
        int v=0;
        float sum=0;
        for (v=0; v<=y; v++) {
            sum += x[v];
        }
    
        return sum / v;
    }
    
    void grade (float x[], char grades[], int y, int &hi, int &med, int &lo) {
        int v=0;
        hi = med = lo = 0;
        for (v=0; v<=y; v++) {
            if ( x[v] >= 35) {
            grades[v] = 'H';
            hi++;
            }
    
            else if ( (x[v] < 35) && (x[v] >= 20) ) {
            grades[v] = 'M';
            med++;
            }
    
            else if ( x[v] < 20 ) {
            grades[v] = 'L';    
            lo++;
            }
        }
    
    }
    
    void writeFile (float x[], float y[], int z, char w[]) {
        ofstream save;
        int v=0;
    
    
        for (v=0; v <= z; v++) {
            cout << "C(Celcius)" << left << setw(5);
            cout << "F(Farenheit)" << left << setw(5);
            cout << "Description\n";
            cout << right << setw(7) << y[v];
            cout << left << setw(8) << x[v];
            cout << left << setw(8) << w[v];        
        }
    }
    int main(int argc, char** argv) {
        int ctr=0, high, medium, low;
        float F[ctr], C[ctr], ave;
        char grades[ctr];
    
    
        readFile (F, ctr);
        computeC (F, ctr, C);
        ave = average (C, ctr);
        grade (C, grades, ctr, high, medium, low);
    
        cout << "Average of the temperatures: " << ave << endl;
        cout << "Number of high temperatures: " << high << endl;
        cout << "Number of medium temperatures: " << medium << endl;
        cout << "Number of low temperatures: " << low << endl;
    
        //writeFile (F, C, ctr, grades);
    
    
        return 0;
    }
    

    (来自https://drive.google.com/file/d/0BxeZTCUL3Q4oZHlqWFdjMDZub0E/view?usp=sharing的代码)

1 个答案:

答案 0 :(得分:0)

如果不检查整个代码,我可以直接想到代码的某些部分。

让我先从

开始
while (!load.eof()) {
        load >> x[y];
        y++;
    }

你写的值多于x []可以容纳的值,在这种情况下你的程序会崩溃。

确保仅向阵列写入最大分配内存。

问题是!load.eof()不会按照您的预期执行操作,因为它将从文件末尾读取。它会再次执行你的循环。

第二

 int ctr=0, high, medium, low;
    float F[ctr], C[ctr], ave;
    char grades[ctr];

ctr0,因此您使用0个元素声明F, c and grades的数组。这不是很聪明;)你不能从他们那里读或写。