1

多くの人にとって非常に単純かもしれない質問がありますが、私の質問に対する答えは見つかりませんでした.

以下のプログラムが正常に動作しています。このコードは、数値を浮動小数点数と整数に変換します。

5.4 を入力したとしましょう。プログラムは double の場合は 5.4、integer の場合は 5 を返します。

ここで、ユーザーが数値ではなくテキストを入力した場合に備えて、throw catch ステートメントをプログラムに追加する必要があります (「変換に失敗した場合は、例外をスローし、ユーザーが値を再入力できるようにします。」)。

これは私がしなければならないことの疑似コードです。

try {
        if(num ==character)
            throw;
        cout << "\n The number entered " << num << "invalid, please enter again";
    }
    catch
    {
    }

私はこのようなものを実装しましたが、うまくいきませんでした。そのメッセージを取得するには、ユーザーがテキストを入力する必要があると考えて、「a」変数文字を設定しました。ただし、機能せず、いくつかのエラーが発生しました。

try
    {
      char a;
      if (num == a) 
        throw num;  
    }
    catch(int e)
    {
      cout << "A number of " << a << " is invalid." << endl;
      cout << "Please re-enter a number: ";
      cin << num  
    }

私はこの「試して、投げて、キャッチする」という言葉にとても慣れていません。これを手伝ってくれたら嬉しいです、ありがとう。

#include <C:\\CSIS1600\MyCppUtils.cpp>
#include <iostream>
#include <string>
using namespace myNameSpace;
int main()
{   
    runner("is running");
    cout << "Enter a number :  ";
    string num;
    getline(cin, num);

    cout<< "double " << getValidDouble(num) << endl;
    cout<< "integer " << getValidInt(num) << endl;

    system("pause");
    return 0;
}

#include<iostream>
#include<string>
using namespace std;

namespace myNameSpace
{
    string num;

    void runner(string str)
    {
        cout <<"runner-3() is running.."<<endl;
    }

    int getValidInt(string n)
    {

        int valueint;
        valueint=atoi(n.c_str());
        return valueint;
    }

    double getValidDouble(string n )
    {

        double valuedouble;
        valuedouble = atof(n.c_str());
        return valuedouble;
    }
} 
4

1 に答える 1

2

Boost を使用して字句キャストを行うことができます。有効な入力 (例: 2.54) がある場合、例外はスローされませんが、無効な入力 (例: 2???54) の場合、bad_lexical キャストがスローされます。

#include <boost/lexical_cast.hpp>

try
{
    double x1 = boost::lexical_cast<double> ("2.54");
    double x2 = boost::lexical_cast<double> ("2???54");
    cout << x1 << x2 << endl;
}
catch(boost::bad_lexical_cast& e)
{
    cout << "Exception caught - " << e.what() << endl;
}   
于 2013-11-03T23:28:36.770 に答える