1

ユーザーからの char 配列入力を受け取る小さな C++ プロジェクトに取り組んでいます。値に応じて、int に変換しています。これを行うにはもっと良い方法があることは理解していますが、後で他の用途に使用できるように ASCII で変換しようと思いました。変換のための私の現在のコードは次のとおりです:-

int ctoi(char *item){
    int ascii, num = 0;
    ascii = static_cast<int>(item[0]);
    if(ascii >= 49 && ascii <=57){
        num = ascii - 48;
    }else{
        return 0;
    }

    ascii = static_cast<int>(item[1]);
    if(ascii >= 48 && ascii <=57){
        num = num * 10;
        num = num + (ascii - 48);
    }else{
        return 0;
    }
    return num;
}

メイン関数の char 配列 item[2] への入力を受け取り、これを上記の変換関数に渡します。この関数は、最初の char を ASCII に変換し、ASCII の 10 進値が 1 ~ 9 の場合は num に変換し、2 番目の char が 0 ~ 9 の場合は num の値を 10 倍します ( 1 単位に沿って移動)、ASCII 値の 10 進値を追加します。いつでも失敗する可能性があり、代わりに値 0 を返します。

値を受け取った後に関数を計算してコンソールでこのコードを実行すると、1 桁の数字 (1 ~ 9) では正常に機能しますが、2 桁の数字を使用しようとすると、23 などの数字が繰り返されます。 2233 を出力します。

助けてくれてありがとう。

4

1 に答える 1

0

入力を 2 文字の配列にどのように読み取っているのでしょうか。このような文字列は null 文字で終了するのが通例であることに注意してください。これにより、実際の入力用に 1 つだけが残ります。C++ で文字列を読み取るには、次のコードを使用します。

std::string s;
std::cin >> s;

または、行全体については、これを使用します。

std::string line;
getline(std::cin, line);

いずれにせよ、これらは C++ のテキストで説明されている基本です。行って読んでください、それは避けられません!

于 2013-01-29T23:05:00.483 に答える