3

私は (ある程度) 経験豊富な Python プログラマーで、C++ に移行しようとしています。無効なユーザー入力をキャッチできるようにしたい。たとえば、変数に整数が必要で、ユーザーが文字列を入力した場合、そのエラーをキャッチしたいと考えています。Python 3 では、構文は次のとおりです。

try:
    #block of code you want to run
except ValueError:
    #Block of code to be run if the user inputs an invalid input

C ++では、構文がTry、catchであることを読みました。私はそれをやろうとしていますが、うまくいきません。ここに私のC ++のコードがあります:

#include "Calculator.h"
#include <iostream>
#include <exception>

using namespace std;

Calculator::Calculator()
{
}

int Calculator::Calc()
{
    cout << "Enter a number " << endl;
try
{
    cin >> a;
}
catch (logic_error)
{
    cout << "An error has ocurred! You have entered an invalid input!"
}

c++で無効な入力をキャッチするにはどうすればよいですか? はい、このクラスのヘッダー ファイルを使用しています。それらのコンテンツが必要な場合は、お知らせください。答えが見つかったら、引き続き Web を検索して投稿します。

4

3 に答える 3

5

あなたがする必要があります#include <limits>

int x;
std::cout << "Enter a number: ";
std::cin >> x;
while(std::cin.fail()) {
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    std::cout << "Bad entry.  Enter a NUMBER: ";
    std::cin >> x;
}
std::cout << "x = " << x << std::endl;

あなたのためのテンプレートがあります。

于 2013-10-31T00:41:10.037 に答える
1

ストリームは、既定では例外をスローしません (そうするように構成できます)。

int を読み取る通常のコードは次のとおりです。

int a;
if (std::cin >> a) {
    # OK
} else {
    # error
}

>>ただし、ここで実際に何が行われるかを確認してください。具体的には、C++ の初心者は、必ずしも行全体を読み取るとは限らないことに驚くことがあります。したがって、入力行全体を検証したい場合、または失敗時に再試行したい場合は、さらにコードが必要です。

于 2013-10-31T00:42:34.067 に答える