Создана программа для конвертации Фаренгейта в Цельсий. Возникли проблемы с проверкой, является ли введенный пользователем тип int. Я считаю, что проблема заключается в строке if (! Cin).
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
float f, c;
string choice;
do{
cout << "Enter a Fahrenheit temperature to convert to Celsius:" << endl;
cin >> f ;
if ( !cin ) {
cout << "That is not a number..." << endl;
}
else if (f < -459.67) {
cout << "That is not a Fahrenheit temperature..." << endl;
}
if ( f >= -459.67) {
c = (( f - 32) * 5.0)/9.0 ;
cout << fixed ;
cout << setprecision(2) << "Celsius temperature is: " << showpos << c << endl;
}
cout << "Would you like to convert another? If so, enter Yes" << endl;
cin >> choice ;
}while ( choice == "Yes" || choice == "yes" );
return 0;
}
Я не уверен в том, что вы имеете в виду по поводу своего «Продолжить утверждение да или нет», поэтому я написал код, который просит пользователя ввести да, чтобы подтвердить преобразование, в противном случае нет, чтобы ввести новое значение по Фаренгейту. После преобразования программа также просит пользователя ввести «да», если он / она хочет выполнить другое преобразование. Если пользователь вводит что-либо, кроме «да», программа закроется.
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
bool Continue = true;
while (Continue == true)
{
double f, c;
cout << endl << "Enter a Fahrenheit temperature to convert to Celsius:" << endl << endl;
while (!(cin >> f))
{
cout << endl << "Invalid Input. " << endl << endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
while (f <= -459.67)
{
cout << "Invalid Input. " << endl;
cin.clear();
cin.ignore();
cin >> f;
}
cout << endl << "Continue? Type yes to proceed conversion, Otherwise type no." << endl << endl;
string confirmation;
cin >> confirmation;
while (confirmation != "yes" && confirmation != "no")
{
cout << endl << "Input not recognized. try again." << endl << endl;
cin >> confirmation;
}
if (confirmation == "yes")
{
c = ((f - 32) * 5.0) / 9.0;
cout << fixed;
cout << endl << setprecision(2) << "Celsius temperature is: " << showpos << c << endl;
cout << endl << "Another convertion? type yes to confirm. " << endl << endl;
string cont;
cin >> cont;
if (cont != "yes")
{
Continue = false;
}
}
}
return 0;
}
Вы должны использовать while
цикл, поэтому программа не перестанет спрашивать, пока пользователь не введет правильные данные. использование cin.clear();
удалить недействительные данные, введенные пользователем. А также cin.ignore();
игнорировать любые последующие ошибочные данные. Например, символы «25tg», «tg» игнорируются, поскольку они недопустимы. «25» будет принято.
Изменения в моем ответе и предоставленном коде приветствуются.
Вы можете использовать функцию, чтобы проверить, является ли ввод числовым или нет ….
должно быть что-то вроде этого:
bool isFloat( string myString ) {
std::istringstream iss(myString);
float f;
iss >> noskipws >> f; // noskipws considers leading whitespace invalid
// Check the entire string was consumed and if either failbit or badbit is set
return iss.eof() && !iss.fail();
}