你好,我正在写我的作业并且已经完成了,但是一件小事仍然让我感到困惑。我想验证浮点输入,所以如果用户键入 char 它应该显示错误消息。我的挣扎是,无论我做什么,我的循环要么不起作用,要么永远循环。非常感谢您的任何建议。
float fuel;
char ch= ???;
if(fuel==ch)
{
do
{cout<<"Input is not valid. Please enter numeric type!";
cin>>fuel;}
while(fuel!=ch);
你好,我正在写我的作业并且已经完成了,但是一件小事仍然让我感到困惑。我想验证浮点输入,所以如果用户键入 char 它应该显示错误消息。我的挣扎是,无论我做什么,我的循环要么不起作用,要么永远循环。非常感谢您的任何建议。
float fuel;
char ch= ???;
if(fuel==ch)
{
do
{cout<<"Input is not valid. Please enter numeric type!";
cin>>fuel;}
while(fuel!=ch);
你试图这样做的方式是行不通的——因为你正在比较一个浮点数和字符,它们最明确地几乎永远不会相等。
试试这个方法:
bool notProper = true;
while(notProper) {
std::string input;
std::cin >> input
if( input.find_first_not_of("1234567890.-") != string::npos ) {
cout << "invalid number: " << input << endl;
} else {
float fuel = atof( num1.c_str() );
notProper = false;
}
};
我的部分来源,请忽略“错误”用法,它基本上只是抛出一个字符串错误:
//----------------------------------------------------------------------------------------------------
inline double str_to_double(const std::string& str){
char *end = NULL;
double val = strtod(str.c_str(), &end);
if(end == str.c_str() || end - str.c_str() != str.length())
serror::raise("string '%s' does not represent a valid floating point value", str.c_str());
if(val == +HUGE_VAL)
serror::raise("string '%s' represents floating point value which is too big", str.c_str());
if(val == -HUGE_VAL)
serror::raise("string '%s' represents floating point value which is too small", str.c_str());
return val;
}
float num;
//Reading the value
cin >> num;
//Input validation
if(!cin || cin.fail())
{
cout << "Invalid";
}
else
{
cout << "valid";
}
您可以使用上述逻辑来验证输入!
试试这样的代码。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
bool CheckFloat( istream & is, float& n ) {
string line;
if ( ! getline( is, line ) ) {
return false;
}
char * ep;
n = strtol( line.c_str(), & ep, 10 );
return * ep == 0;
}
int main() {
float n;
while(1) {
cout << "enter an float: ";
if ( CheckFloat( cin, n ) ) {
cout << "is float" << endl;
}
else {
cout << "is not an float" << endl;
}
}
}