首先,我希望你知道我是一名大学生(我们的编程课程大纲还没有那么高级)(顺便说一句,我不是要求我的作业答案等,我只是练习)。
好的,我有2个问题
我希望你们能帮助我,我一整天都在寻找。
#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的代码)
答案 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];
ctr
为0
,因此您使用0个元素声明F, c and grades
的数组。这不是很聪明;)你不能从他们那里读或写。