4

私はC++の初心者です。小さなコード サンプルは次のとおりです。

int main(int argc, char* argv[]) {    

    char ch1;
    int int1;

    cin >> ch1;
    cin >> int1;

    cout << ch1 << '\n';
    cout << int1 << '\n';

    return 0;
}

プログラムを実行して次のように入力すると:

から

私は出力として得ます:

32767

「a」は理解できますが、なぜ 32767 という整数値なのですか? int1 に割り当てられた数値の代わりに「z」を使用した場合にどうなるかをテストして確認したいだけです。

入力してみます:

...そして私も同じ結果を得ます。

ここで、入力を使用してプログラムint int1を使用して実行する代わりに、次のようにします。short int1

から

出力が得られます:

0

PS

sizeof(int) = 4
sizeof(short) = 2

私は64ビットマシンを使用しています。

4

4 に答える 4

4

入力ストリームが有効なデータの読み取りに失敗した場合、渡された値は変更されません。「z」は有効な数値ではないため、int1 は変更されません。int1 は初期化されていないため、たまたま 32767 の値を持っていました。データを読み取った後、cin.fail() または cin.good() の値をチェックして、すべてが期待どおりに機能したことを確認してください。

于 2010-03-16T03:23:24.517 に答える
1

cin >> int1;「整数を読み取ってint1に入れる」ことを意味します。したがってz、整数の有効な文字ではないそれをフィードすると、単に読み取りが中止され、何でも残されint1ます。

int1何かを初期化し、何が起こるかを確認して、これをテストします。

于 2010-03-16T03:18:26.303 に答える
0

C++cinストリームは、プログラムの入力検証を行っています。

cinからにストリーミングする場合int cin、有効な数字 -0123456789 のみ、および INT_MIN と INT_MAX の間の値のみを受け入れます。

z(122)の数値が必要な場合は、ストリームgetcharではなく c 関数を使用することをお勧めします。cin

int main(int argc, char* argv[]) {

    cout << "function main() .." << '\n';

    char ch1 = getchar();
    int int1 = getchar();
    cout << ch1 << '\n';
    cout << int1 << '\n';

    return 0;

}

az が入力されると、これが出力されます

a
122
于 2010-03-16T03:40:14.090 に答える
0

cinを直接使用することは、個人的に、つまり私にとっては、重要なプログラムでデータを読み取るのに悪い考えです。同様の質問に対して私が行った別の回答を読むことをお勧めします。

C++ 文字から int

于 2010-03-16T09:05:18.147 に答える