2

私はC ++に関するGoogle大学のセクションを調べていますが、このコードが何をするのかわかりません:

if (!(cin >> input_var)) {

    cout << "you entered a non-numeric. Exiting..." << endl;
    break;

}

if ステートメント内のステートメントは実際にここで何をしますか?

ありがとう!

4

8 に答える 8

7

これは非常に基本的な C++ です。通常、>><<はビット シフトに使用されます。ただし、I/O ストリーム ライブラリにはストリーム用のoperator>>とがオーバーロードoperator<<されているため、ストリームをそれぞれ抽出挿入に使用できます。なんで?演算子が方向性を持つ 2 つの矢印のように見えるため、コードが適切に読み取れるため、データはその方向に移動します。

あなたの例でcinは、標準入力ストリームであり、そのストリームから変数に整数を抽出していますinput_var。「標準入力からのcin >> input_var抜粋」と読みます。input_var

同様に、ifステートメントの本文内で、標準出力ストリームに挿入していますcout

I/O オーバーロードは、抽出または挿入するストリームへの参照operator<<operator>>返します。boolこのストリームは、ステータスを確認できるように変換できます。つまり、実行すると、ストリームif (cin)のステータスが問題ないかどうかがチェックされます。cinあなたの場合、「not」演算子を使用して!、ストリームが問題ないかどうかを確認しています。そうでない場合は、エラーを出力します。

!(cin >> input_var)ステートメントの内部はifステートメント自体ではなく、式であることに注意してください。

于 2012-12-18T16:49:11.570 に答える
3

int(変数)を読み取り、部分(オーバーロードされた を持っていますinput_var)を介して読み取りが成功したかどうかを確認します。!(cin >> ...)istreamoperator !

于 2012-12-18T16:48:24.567 に答える
2
if ( !(cin >> input_var) )

>>これは、 に対してオーバーロードされた演算子であり、特定のオーバーロードstd::istream&のタイプに基づいてinput_var、ストリームからデータを読み取り、 に格納する特定のオーバーロードが呼び出されますinput_var。演算子オーバーロードの戻り値の型は is です。これは式の型が isでstd::istream&あることを意味し、orで使用すると、ストリームからの読み取りが成功したかどうかに応じてorに自動的に変換できます。したがって、 andなどのブール式を必要とする任意の構成でこれを記述できます。cin >> input_varstd::istream&ifwhiletruefalseifwhile

if ( cin >> data )
{
     //this block will execute only if the data was successfully read
}

同様に、

while ( cin >> data )
{
     //this block will execute only if the data was successfully read
     //and the loop will continue until read attempt fails.
}
于 2012-12-18T16:49:20.293 に答える
2

cin >> input_varに保存されている入力をユーザーに求めますinput_var。整数以外の入力を受け取った場合は、if 条件内に入ります。「変数がintであることを考慮してください。」

于 2012-12-18T16:50:32.403 に答える
1

演算子は、>>コンテキストに応じて 2 つの意味を持ちます。

整数を使用する場合は、右シフト演算子にすることができます1024 >> 3。ビット シフトを実行します。

あなたの場合、それを「抽出演算子」と見なします。から抽出するときcin、プログラムは標準入力 (通常はキーボード) から読み取り、右側に収まるようにフォーマットしようとします。整数に読み込んでいるので、次の手順を実行します。

  • 先行する空白を読み取って破棄する
  • +または-を正または負の記号として読み取って解釈する
  • 整数を構築するために、できるだけ多くの数字を読み取ります。

何かを読み取って整数を作成できる場合、プロセスは true と評価される何かを返すことになるため、次の行は次のようになります。

if(!(cin >> input_var))

変換が成功したかどうかを確認します。代わりに入力したなど、数値を読み取ることができなかった場合fred、変換が失敗したため、プロセスは false と評価される何かを返します。返される値は実際にはcinであり、これは に変換できますが、それはbool雑草の中に少しあります。

于 2012-12-18T16:51:45.000 に答える
1

iostream のコンテキストでは、多くの場合、ライターは << と >> をそれぞれ「put-to」または「ストリーム挿入」および「get-from」または「ストリーム抽出」演算子と呼びます。

オペランド間で >> を使用すると、ビットごとの右シフトを意味します

于 2012-12-18T16:49:46.097 に答える
0

オペレーターです。動作は、input_var によって異なります。こちらをご覧ください: MSDN .

于 2012-12-18T16:51:29.393 に答える
0

これはオーバーロードされた演算子です。

  • 入力用、抽出演算子としてcin>>value;

  • ビットごとの右シフトvalue>>2;

于 2012-12-18T16:50:28.137 に答える