我想弄清楚我在这里做错了什么,早上五点我必须在今天早上9点把它转过来,所以这是我最后的希望来找你们。
该程序必须允许用户输入5个整数,7个浮点数和5个字符,这些字符将进入必须通过函数模板编码的数组。数字数据必须进行冒泡排序和平均。这必须打印出来然后我必须将数组保存到.dat文件并从文件中检索数据并再次输出。
错误:不能以某种方式正确记录平均值,因此您会得到一个讨厌的随机内存输出。 只有int值被保存到文本文件中,我甚至不知道如何正确检索并再次打印检索到的值。
使用固定计算功能更新代码
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
//Load data to array from Keyboard.
template <class T>
void load(T *a,const int n)
{
for(int i=0;i<n;i++)
cin>>a[i];
}
//Calc and Print the Average for a numeric array.
template <class T>
void calc(T *a,const int n,float *avg)
{
float b=0;
for (int i=1;i<n;i++)
{
b+=a[i];
}
*avg=b/n;
cout<<"The Average is: "<<*avg<<endl;
//Does not work. Prints out a random block of memory.
//Tried a couple things and still get he same bug.
}
//Sort the data array in ascending order.
template <class T>
void sort(T *a,const int n)
{
float t;
for(int i=0;i<n-1;i++)
for(int j=0;j<n-1;j++)
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
//Save the array data to a text file.
template <class T>
void get(T *a,const int n)
{
ofstream outfile("C:\array.dat", ios::out);
for(int i=0;i<n;i++)
outfile << a[i]<< endl;
outfile.close();
//Only saves the first array (The ints)
}
//Retrieve the array data from the text file.
template <class T>
void save(T *a,const int n)
{
ifstream infile("C:\array.dat", ios::in);
for(int i=0;i<n;i++)
{
infile>>a[i];
}
infile.close();
}
/*Output should include the average for each of the two numeric arrays
along with all three arrays being printed out in ascending order twice,
once before the text file is saved and once after the array is retrieved
from the text file*/
int main()
{
const int n1=5,n2=7,n3=5;
int a[n1];
float b[n2];
char c[n3];
float avg[3];
int i;
cout<<"Enter 5 integers"<<endl;
load(a,n1);
sort(a,n1);
calc(a,n1,avg);
cout<<"Enter 7 floats"<<endl;
load(b,n2);
sort(b,n2);
calc(b,n2,avg+1);
cout<<"Enter 5 strings"<<endl;
load(c,n3);
cin.ignore(20, '\n');
sort(c,n3);
cout << endl;
cout<<"Output:"<<endl;
cout<<"The Integer array:" << endl;
for (i = 0; i < n1; i++)
cout << a[i] << " ";
cout << endl;
cout<<"The Float array:" << endl;
for (i = 0; i < n2; i++)
cout << b[i] << " ";
cout << endl;
cout<<"The String array:" << endl;
for (i = 0; i < n3; i++)
cout << c[i] << " ";
cout << endl;
save(a,n1);
get(a,n1);
save(b,n2);
get(b,n2);
save(c,n3);
get(c,n3);
//Need to print the now returned values here.
cout << endl;
//cin.get();
system("PAUSE");
return 0;
}
很抱歉,如果这一半没有意义。我真的很累。
答案 0 :(得分:1)
平均值:
template <class T>
void calc(T *a,const int n,float *avg)
{
float b=0;
for (int i=1;i<n;i++)
{
b+=a[i];
}
avg[n]=b/n;
cout<<"The Average is: "<<avg[4]<<endl;
//Does not work. Prints out a random block of memory.
//Tried a couple things and still get he same bug.
}
你不需要一组平均值,你只需要一个平均值。
agv[n] = b / n; //assigns to the the n'th elemement of an array called avg.
试试这个:
*avg = b/n
要打印出来,也只是'* avg'。
调用calc时,请尝试:
float avg1;
calc(b,n4,&avg1);
当你看到&amp;和*,请阅读以下内容:
& address of
* contents of address
答案 1 :(得分:0)
你只需要三个平均值,一个用于5个整数,一个用于7个浮点数,一个用于5个字符。
float avg[4]; // should be: float avg[3];
您似乎将错误的参数传递给每个calc函数。当您为整数调用calc时,请使用:
calc(a,n1,avg);
for floats:
calc(b,n2,avg+1);
for chars:
calc(c,n3,avg+2);
N4 = 2;与任何事情无关,你可以删除n4。
答案 2 :(得分:0)
当您打开文件时,您需要指定附加到现有文件的ios:app。没有它,每次你写入文件时,之前存在的任何内容都将被丢弃。
ios::out | ios::app
所以,首先编写只使用ios :: out,然后再包含ios :: app