I’m working on a program for class that reads data from a file, the processes the data and writes to another file. We are required to use two functions in the program, and I believe my program is not functioning properly because of some error with my functions.
First, let me describe the input file and then I will add my code. The input file starts with a sentinel number to let the program know the number of lines to be read. Each following line consists of 12 numbers representing a date in the form YYYYMMDDHHMM and a temperature reading in the form of Xtemp where x is either c or f (e.g. C17.5 or F64.12). Our output is supposed to convert temps to Celsius, if they aren’t already and then each line should appear in the format “17.5 C — recorded on 04/12/2009” and so on for each line.
Here is my code so far. Like I said I think the problem is in the functions.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;
void timeConverter(char timeStamp[]);
float tempConverter(float);
int main()
{
ifstream fin;
ofstream fout;
int endcycler, cycler;
char timeStamp[11];
char tempUnit;
float tempData;
fin.open("aquarenadata.dat");
if (!fin)
{
cout<<"Error opening input file"<<endl;
system("pause");
return -1;
}
fout.open("formatteddata.dat");
fin >> endcycler;
cycler = 0;
while (cycler < endcycler)
{
fin >> timeStamp;
fin >> tempUnit;
fin >> tempData;
if (tempUnit == 'C' || tempUnit == 'c')
cout << tempData << " C --- recorded on ";
else if (tempUnit == 'F' || tempUnit == 'f')
{
tempData = tempConverter(tempData);
cout << tempData << " C --- recorded on ";
}
else
{
cout <<"Invalid temperature scale"<<endl;
system("pause");
return -2;
}
void timeConverter();
cycler++;
}
fin.close();
fout.close();
system("pause");
return 0;
}
void timeConverter (char timeStamp[])
{
cout<<timeStamp[4]<<timeStamp[5]<< "/" <<timeStamp[6]<<timeStamp[7]<< "/"<<timeStamp[0]<<timeStamp[1]<<timeStamp[2]<<timeStamp[3]<< " at " <<timeStamp[8]<<timeStamp[9]<<timeStamp[10]<<timeStamp[11]<<endl;
}
float tempConverter (float tempData)
{
float result;
result = (tempData - 32) * (5 / 9);
return result;
}
As far as the problem with displaying date, it’s probably the fact that you are not actually calling the timeConverter function.
Instead of
Try
You may also want to make sure that the input is in the correct format, i.e timestamp actually is at least of length 8
For the error in the conversion, it will be easier if you give us actually value that it returns for some inputs.