1.1k views
5 votes
C++ - Did I write this code correctly? I am unable to output the conversion I created, so I am not sure if I am missing something. Here are the instructions:

Prompt
In this assignment, you are presented with a text document that includes six cities and their average yearly temperature in Fahrenheit. Your goal is to read that data, convert it to Celsius using the provided formula, and then write that new data to its own file.
To begin your work, open Visual Studio and create a new C++ project. Save the provided FahrenheitTemperature.txt document in a location where you will easily be able to access it while you work in Visual Studio. For this assignment, you will be submitting only your C++ (.cpp) file. You do not need to submit the final converted data; the C++ code you create just needs to be able to generate that file.
Specifically, you must address the following rubric criteria:
Develop code to read data from a text file. Your work should be completed using C++. Read the provided document, FahrenheitTemperature.txt, which includes data on the average yearly temperature for six different cities in degrees Fahrenheit. Note that a space separates each city from its temperature. Assume the city’s name does not include any spaces or special characters (the name should consist of only a single word). Also assume the provided temperature is presented as an integer. Consider the following steps as you work:
Open the provided file so it is ready to be read. Remember the file is named FahrenheitTemperature.txt. Watch out for the class you use, and make sure it is for reading a file and not writing to a file.
Read data from the provided file. Remember, to read this file you will need to declare a variable. Begin by reading the first value and putting it in the first variable. Then read the next value and put it in the second variable.
Once this is complete, be sure to close the file. This releases the file so it can be used again.
Develop code to write data to a text file. Your work should be completed using C++. Title the new document you are creating CelsiusTemperature.txt. The name of the output file needs to be different from the name of the input file so you do not overwrite and erase the input file. Consider the following steps as you work:
Declare a variable to point to the file that will be written to. Watch out for the class you use, and make sure it is for writing to a file and not reading a file.
Create the code instructions for writing data to the new output file. In this new file, include space for both the name of the city and the temperature in Celsius for each city included in the original input file. You will need to complete the Fahrenheit-to-Celsius conversion calculation before you write to the new file. Use the following formula to make this conversion. Note that °F represents the temperature in degrees Fahrenheit while °C represents the temperature in degrees Celsius.
Close the file once you are done writing to it. If you attempt to look at the results in the file before completing this step, your file may appear empty.
***************************************
Here is the .txt file:
Toronto 47
Lima 66
Istanbul 57
Lagos 81
Shanghai 61
Sydney 64
***************************************
Here is my code:
#include
#include //enables use of ifstream class
#include
using namespace std;
int main() {
//Declaring object/variables
ifstream inFS; //input file stream
ofstream outFS; //output file stream
string cityName; //Name of city from file
int tempFarenheit; //Farenheit temp
double tempCelsius; //Celsius temp (double because when calculating, there will be a decimal)
//Opening Farenheit file
inFS.open("FarenheitTemperature.txt");
//Creating Celsius file
outFS.open("CelsiusTemperature.txt");
//Creating a while loop that reads FarenheitTemperature.txt info, converts temp from F to C
//using formula provided, then writes new info to CelsiusTemperature.txt file
while (inFS >> cityName >> tempFarenheit) {
tempCelsius = (tempFarenheit - 32) * (5 / 9);
outFS << cityName << " " << tempCelsius << endl;
}
//Closing files
inFS.close();
outFS.close();
return 0;
}

User Rberggreen
by
7.7k points

1 Answer

3 votes

Answer:

This code looks correct, but there is a small issue that may affect the accuracy of the temperature conversion. In the calculation for the temperature in Celsius, you are dividing 5 by 9 using integer division, which means that the division will be truncated to an integer and any decimal values will be discarded. To avoid this, you need to cast one or both of the values to a floating-point type, such as double.

Step-by-step explanation:

#include <iostream>

#include <fstream> //enables use of ifstream class

#include <string>

using namespace std;

int main() {

// Declaring object/variables

ifstream inFS; //input file stream

ofstream outFS; //output file stream

string cityName; //Name of city from file

int tempFarenheit; //Farenheit temp

double tempCelsius; //Celsius temp (double because when calculating, there will be a decimal)

// Opening Farenheit file

inFS.open("FarenheitTemperature.txt");

// Creating Celsius file

outFS.open("CelsiusTemperature.txt");

// Creating a while loop that reads FarenheitTemperature.txt info, converts temp from F to C

// using formula provided, then writes new info to CelsiusTemperature.txt file

while (inFS >> cityName >> tempFarenheit) {

tempCelsius = (tempFarenheit - 32) * (5.0 / 9.0);

outFS << cityName << " " << tempCelsius << endl;

}

// Closing files

inFS.close();

outFS.close();

return 0;

}

User TantanQi
by
7.5k points