Can you tell me whats wrong with my program. When I run the program it gives inv
ID: 3647682 • Letter: C
Question
Can you tell me whats wrong with my program. When I run the program it gives invalid integer entry before a number has even been entered. Please Help!!!#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
// functions prototype
void displayMenu();
char getMenuSelection();
void getStartEndAndIncrement(int&, int&, int&);
double CtoF(double);
double FtoC(double);
void displayTable(char, int, int, int);
// display the main menu
void displayMenu()
{
cout << "Welcome to the temperatures convertor program" << endl;
cout << "Please select one of the following options: " << endl;
cout << "(F/f) From Fahrenheit to Celsius" << endl;
cout << "(C/c) From Celsius to Fahrenheit" << endl;
cout << "(Q/q) Exit" << endl;
}
// get the menu selection from the user
// return the option
// f...... F to C
// c...... C to F
// q...... Quit
char getMenuSelection()
{
char selection = '';
cout << "Please select an option: ";
cin >> selection;
while (tolower(selection) != 'f' && tolower(selection) != 'c' && tolower(selection) != 'q')
{
cout << "-- Invalid selection: try again --" << endl;
cout << endl;
//re-prompt the menu
displayMenu();
cout << "Please select an option: ";
cin >> selection;
// clear the ' ' after the user hits enter
cin.clear();
}
return selection;
}
// gets the start, end and increment values
// NOTE: since we are not allowed to use global variables, I guess passing by reference instead here
void getStartEndAndIncrement(int& start, int& end, int& increment)
{
cout << "Enter 3 integers: starting temperature, ending temperature, and an increment" << endl;
string tmpStart = "", tmpEnd = "", tmpIncre = "";
// check if the number user enters is a digit
cout << "starting temperature: ";
cin >> tmpStart;
cin.clear();
while (atoi(tmpStart.c_str()) == 0)
{
cout << "-- Invalid starting temperature -- " << endl;
cout << endl;
cout << "reenter again: ";
cin >> tmpStart;
cin.clear();
}
cout << "ending temperature: ";
cin >> tmpEnd;
cin.clear();
while (atoi(tmpEnd.c_str()) == 0)
{
cout << "-- Invalid ending temperature -- " << endl;
cout << endl;
cout << "reenter again: ";
cin >> tmpEnd;
cin.clear();
}
cout << "increment: ";
cin >> tmpIncre;
cin.clear();
while (atoi(tmpIncre.c_str()) == 0)
{
cout << "-- Invalid increment value -- " << endl;
cout << endl;
cout << "reenter again: ";
cin >> tmpIncre;
cin.clear();
}
start = atoi(tmpStart.c_str());
end = atoi(tmpEnd.c_str());
increment = atoi(tmpIncre.c_str());
}
// converts a celsius temperature to Fahrenheit
double CtoF(double celsius)
{
return celsius*9/5+32;
}
// converts a Fahrenheit temperature to celsius
double FtoC(double fahrenheit)
{
return fahrenheit*5/9-32;
}
// displays a C to F or F to C table given start, end and increment values, and the
// conversion character the user selected
void displayTable(char option, int startTemp, int endTemp, int increment)
{
cout << "------------------------------" << endl;
cout << setiosflags(ios::right);
cout << setiosflags(ios::fixed);
// convert from C to F
if (option == 'c')
{
cout << setw(6) << "C" << (char)248 << setw(8) << "F" << (char)248 << endl;
while (endTemp > startTemp)
{
cout << setw(8) << startTemp << setw(8) << setprecision(1) << CtoF(startTemp) << endl;
startTemp += increment;
}
// output the endTemp
if (startTemp != endTemp)
cout << setw(8) << endTemp << setw(8) << setprecision(1) << CtoF(endTemp) << endl;
}
else // convert from F to C
{
cout << setw(6) << "F" << (char)248 << setw(8) << "C" << (char)248 << endl;
while (endTemp > startTemp)
{
cout << setw(8) << startTemp << setw(8) << setprecision(1) << FtoC(startTemp) << endl;
startTemp += increment;
}
// output the endTemp
if (startTemp != endTemp)
cout << setw(8) << endTemp << setw(8) << setprecision(1) << FtoC(endTemp) << endl;
}
}
int main()
{
char usrSelection = '';
int startTemp = 0;
int endTemp = 0;
int increment = 0;
displayMenu();
usrSelection = getMenuSelection();
// as long as the user doesn't quit
while (usrSelection != 'q')
{
getStartEndAndIncrement(startTemp, endTemp, increment);
displayTable(usrSelection, startTemp, endTemp, increment);
cout << endl;
displayMenu();
usrSelection = getMenuSelection();
}
return 0;
}
Explanation / Answer
please rate - thanks
there is nothing wrong, other than some formatting to fix with your program
as you can see, it works fine
Related Questions
Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.