1

ユーザー入力(自然数が必要)を受け取り、逆数を出力するプログラムを作成する必要がある割り当てがあります。プログラムはそれを問題なく実行しますが、自然数ではない値を入力するときにプログラムがエラーを出さないようにする必要もあります。double 値を入力するか、数字の後に文字を入力すると、プログラムが終了します。残りの場合、プログラムは問題なく動作します。これらの問題の原因は何ですか?

int number;
char x = 'c';
while (x == 'c') {
    cout << "Enter a number\n";
    cin >> number;
    while (!(cin.good()) || number < 1 || floor(number) != number) {
        cin.clear();
        cin.ignore(256,'\n');
        cout << "Try again.\n";
        cin >> number;
    }
    string reverse;
    stringstream convert; 
    convert << number;
    reverse = convert.str();
    reverse = string (reverse.rbegin(),reverse.rend());
    cout << "The reverse number for number " << number << " is " << reverse << endl;
    cout << "If you want to continue using the program enter 'c',\nif you want to close the program enter anythin else\n";
    cin >> x;
    }
4

3 に答える 3

1

これは、123.456と言うと、プログラムが123を として読み取るためintです。次に、それを逆にして期待char x == 'c'しますが、 dot を取得します。.

かどうかを確認してstd::stringから読み取ります。std::cinint

std::string reverse;
std::cin >> reverse;

std::istringstream test(reverse);
int value; std::string rest;
if (!(test >> value) || (test >> rest)) // must read int but nothing more
{
  prompt for new value
} 
于 2012-10-13T22:18:22.937 に答える
0

double自然数は実数のサブセットであるため、実際に入力タイプとして取り、それを自然数に変換します...少なくとも、ユーザーがdoubleまたはその他を入力することによって発生するエラーを回避する最も簡単な方法です浮動小数点型。

于 2012-10-13T22:16:54.970 に答える
0

私見:あなたの割り当てを満たすためには、最初に数値を文字列として読み取る必要があります。次に、数値が自然数であるかどうか、つまり「。」があるかどうかを確認する必要があります。そうでない場合は、前に行ったことを行います。それ以外の場合は、エラー メッセージが表示されます。

于 2012-10-13T22:22:58.443 に答える