1

こんにちは、私の課題を書いていますが、それはまったく完了していますが、1 つの小さなことがまだ私を混乱させています。float 入力を検証したいので、ユーザーが char を入力するとエラー メッセージが表示されます。私の苦労は、ループを何をしても機能しないか、永遠にループすることです。アドバイスありがとうございます。

float fuel;
char ch= ???;

if(fuel==ch)
{
do
{cout<<"Input is not valid. Please enter numeric type!";
cin>>fuel;}

while(fuel!=ch);
4

4 に答える 4

0
float num;

//Reading the value
cin >> num;

//Input validation
if(!cin || cin.fail())
{
    cout << "Invalid";
}
else
{
    cout << "valid";
}

上記のロジックを使用して入力を確認できます!

于 2013-03-11T13:26:13.217 に答える
0

このようなコードを試してください。

#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;
        }
    }
}
于 2013-03-11T13:22:24.520 に答える
0

あなたがやろうとしている方法はうまくいきません - float と char を比較しているので、それらはほとんど同じになることはほとんどありません。

代わりに次の方法を試してください。

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;
  }
};
于 2013-03-11T13:19:55.273 に答える
0

私のソースの一部です。「serror」の使用法は無視してください。基本的には文字列エラーがスローされます。

//----------------------------------------------------------------------------------------------------
    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;
    }
于 2013-03-11T13:29:18.160 に答える