首先,我想讓你知道我是一個大學生(我們的編程教學大綱不是那麼先進)(順便說一句,我沒有要求我的任務等答案,我只是練)。當從一個文件中讀取時崩潰
行,所以我有2個問題
- 我的代碼中的一些功能,改變了我的數組的值(當我不希望它)
- 我真的不知道,但似乎得到了一些從一個文件存儲到我的數組中的值會使程序崩潰,此外,在用代碼弄弄了一下之後(我不知道什麼改變了),它在所述部分期間不再崩潰,但它仍然在代碼的末尾崩潰執行..
我希望你們可以幫助我,我b整天都在尋找。
#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)
歡迎來到SO。如果你想獲得幫助,你的問題可以做一些改進。嘗試讀這:http://stackoverflow.com/help/how-to-ask告訴我們什麼不工作。 – 2014-12-02 08:39:14
歡迎來到stackoverflow.com。請花些時間閱讀[幫助頁面](http://stackoverflow.com/help),尤其是名爲[「我可以問些什麼話題?」]的章節(http://stackoverflow.com/help/)討論話題)和[「我應該避免問什麼類型的問題?」](http://stackoverflow.com/help/dont-ask)。另請[請閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。您可能還想了解如何創建[最小化,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。 – 2014-12-02 08:39:56
至於你的問題,首先不要做'while(!load.eof())',因爲它不會像你期望的那樣工作。在你試圖從文件末尾讀取之後,'eofbit'標誌將不會被設置,所以你的循環會迭代一次到很多次。其次,在你的'main'函數中,你聲明數組'F'和'C'具有* zero size *!這意味着對它們的每次訪問(讀或寫)都將超出導致[* undefined behavior *](http://en.wikipedia.org/wiki/Undefined_behavior)的界限。 – 2014-12-02 08:45:37