0

getlineを使用して、プログラムの入力をループで読み取っています。

    string temp(STR_SIZE, ' ');
    string str_num(STR_SIZE, ' ');
    ...
    getline(cin, temp, '\n');

その後、関数を使用して次の区切り文字(空白)を見つけ、空白の前のすべての文字をstr_numに割り当てます。次のようになります。

    str_num.assign(temp, 0, next_white_space(0));

これがうまく機能することを確認しました。私のソリューションの次のステップは、str_numをintに変換することです(この部分もうまく機能します)が、str_numの各文字が数字であることを確認する必要があります。これが私が試した中で最高のものです:

    if(!isdigit(str_num[0] - '0')) {
        cout << "Error: Not an appropriate value\n";
        break; /* Leave control structure */
    }

何らかの理由で、これは常にエラーメッセージを出力し、構造を終了します。何故ですか?以前、文字列オブジェクトにoperator []を使用しましたが、うまく機能しているようです。しかし、ここでは、それは完全に私を台無しにしています。

ありがとう。

4

1 に答える 1

7

std::isdigitcharの整数値を取り、それをチェックします。

したがって、-'0'を削除し、str_num [index]をisdigit()に渡すだけです。

注:この関数はCに由来するため、intを使用するメソッドでは、charを整数として扱う古いスタイルがわかります。ただし、charはint値にプロモートできるため、charはintになり、これは機能します。

于 2012-09-13T04:44:42.757 に答える