Good day! (Yes to all interpretations thereof.)
I am a beginner at C, studying on my own because it's fun and my goal is to "simply" gain a better understanding of how machines work under the hood. I just successfully wrote a bidirectional Celcius/Fahrenheit converter that also takes some user input. As a next step, I would like to save conversion history. Do I have to save to a file outside the program or can I temporarily save history in a variable or an array and give the user the choice to check history by displaying the contents of that variable/array? If the answer is saving to an outside file, then I digress, as this is next on my "curriculum" (still self studies). If the answer is that I can save previous input into variables or an array, how do I make a - for instance - for loop go through the elements of that array, assigning one user input (temperature conversion) in one element at a time?
Also, if this is more advanced than what I am make it sound like, please let me know, and I'll let it be for the time being.
#include <stdio.h>
//Function declarations
float toCelcius(float fahrenheit);
float toFahrenheit(float celcius);
//Bidirectional temperature converter
int main() {
int f_value;
int c_value;
int choice;
printf("\nWelcome to this Fantasic Bidirectional Temperature Converter!\n");
printf("\nWhat would you like to do? Press f + enter to convert Fahrenheit to Celcius, c + enter to convert Celcius to Fahrenheit or ctrl + c to exit: ");
while ((choice = getchar()) != EOF) {
if (choice != 'f' && choice != 'c') {
printf("Goodbye!\n"); //ctrl + c does not allow for this to be displayed.
}
if (choice == 'f') {
printf("\nEnter the temperature in Fahrenheit: ");
scanf("%d", &f_value);
getchar();
printf("\n%d degrees Fahrenheit is %.1f degrees Celcius.\n", f_value, toCelcius(f_value));
}
if (choice == 'c') {
printf("\nEnter the temperature in Celcius: ");
scanf("%d", &c_value);
getchar();
printf("\n%d degrees Celcius is %.1f degrees Fahrenheit.\n", c_value, toFahrenheit(c_value));
}
printf("\nWhat would you like to do next? Press f + enter to convert Fahrenheit to Celcius, c + enter to convert Celcius to Fahrenheit or ctrl + c to exit: ");
}
return 0;
}
//Function definitions
float toCelcius(float fahrenheit) {
return (5.0 / 9.0) * (fahrenheit - 32.0);
}
float toFahrenheit(float celcius) {
return (celcius * 1.8) + 32;
}
For saving the history inside of one program run, an array is enough. For saving the history over multiple program runs (over closing by typing and invalid character or ctrl+c and restarting it), you would need to store it in a file.
You can already print the last conversion by reading the value of
f_value/c_valuewithout writing to it (note that if no conversion of that type has happened before, you will get garbage, and that you will have to modify the if at the start of the loop to check for 'x' too):For a longer history you need some extra places to store the numbers. if you use an array, you need to store the length of the history too, since c does not store how far into the array you have written.
PS: the
forloop in here is equivalent to the following while loop:Woa! Thank you so much for using my embarassingly amateurish program to exemplify! This was really easy to read and understand! I'll play around with this for a while! :)
some things seem to have duplicated in there, i will clean it up now.