【发布时间】:2013-12-08 20:02:54
【问题描述】:
我正在尝试从文本文件中输入数字。我需要做的是将数字排序到一个存储奇数的数组中,以及一个存储偶数的数组中。从那里,我只需要输出平均值、总计、最小值、最大值,然后是数组中大于平均值的数字。
根据研究,我的理解是 seg.由于内存分配问题而发生故障。我检查了我的数组,我认为应该没有问题。文件中的数字总数为 50,因此应该有空间容纳数字,以及我在 main 开头为数组分配的空间。
这是我的输入文件:
46 30 82 90 56 17 95 16 48 26 4 58 0 78 92 60 12 21 63 47 19 41 90 85 14 -9 52 71 79 16 80 51 95 102 34 10 79 95 61 92 89 88 66 64 92 63 66 64 39 5
顺便说一句,我正在使用 Linux。
#include <iostream>
#include <fstream>
using namespace std;
void oddOrEven(int [], int [], int [], ifstream &, int &, int &, int &);
void calcData(int [], int [], double &, double &, double &, double &, double &, int &,
int &);
int main()
{
int i;
int a;
int b;
double totalEven = 0;
double totalOdd;
double average = 0;
double max = 0;
double min = 0;
int array[75] = {0};
int evenArray[50] = {0};
int oddArray[50] = {0};
ifstream fileIn;
fileIn.open("file.txt");
if (!fileIn){
cout << "\nError, could not open file.\n";
}
oddOrEven(array, evenArray, oddArray, fileIn, i, a, b);
calcData(evenArray, oddArray, totalEven, totalOdd, average, min, max, a, b);
fileIn.close();
return 0;
}
void oddOrEven(int array[], int evenArray[], int oddArray[], ifstream & fileIn, int & i,
int & a, int & b){
while (fileIn >> i) {
fileIn>>array[i];
if (array[i] % 2 == 0){
evenArray[a]=array[i];
a++;
}
else{
oddArray[b] = array[i];
b++;
}}}
void calcData(int evenArray[], int oddArray[], double & totalEven, double & totalOdd,
double & average, double & min, double & max, int & a, int & b){
//Find min, max, total and average for Even Array.
for (int i = 0; i < a; i++){
totalEven += evenArray[i];
if (i = 0){
min = evenArray[i];
max = evenArray[i];
}
if (evenArray[i] < min)
min = evenArray[i];
if (evenArray[i] > max)
max = evenArray[i];
}
average = totalEven/a;
cout << "\nMinimum is " << min;
cout << "\nMaximum is " << max;
cout << "\nTotal is " << min;
cout << "\nAverage is " << average;
//Numbers higher than the average for Even Array:
for (int k = 0; k < a; k++){
if (evenArray[k] > average/2)
cout << evenArray[k] << " ";
}
//Find min, max, total and average for Odd Array.
for (int i = 0; i < a; i++){
totalOdd += oddArray[i];
if (i = 0){
min = oddArray[i];
max = oddArray[i];
}
if (oddArray[i] < min)
min = oddArray[i];
if (oddArray[i] > max)
max = oddArray[i];
}
average = totalOdd/b;
cout << "\nMinimum is " << min;
cout << "\nMaximum is " << max;
cout << "\nTotal is " << min;
cout << "\nAverage is " << average;
//Numbers higher than the average for Odd Array:
for (int k = 0; k < b; k++){
if (oddArray[k] > average/2)
cout << oddArray[k] << " ";}
}
【问题讨论】:
-
你能缩进你的代码吗?
-
你试过用
std::vector<int>代替数组吗?
标签: c++ arrays segmentation-fault fstream