私はC ++に関するGoogle大学のセクションを調べていますが、このコードが何をするのかわかりません:
if (!(cin >> input_var)) {
cout << "you entered a non-numeric. Exiting..." << endl;
break;
}
if ステートメント内のステートメントは実際にここで何をしますか?
ありがとう!
私はC ++に関するGoogle大学のセクションを調べていますが、このコードが何をするのかわかりません:
if (!(cin >> input_var)) {
cout << "you entered a non-numeric. Exiting..." << endl;
break;
}
if ステートメント内のステートメントは実際にここで何をしますか?
ありがとう!
これは非常に基本的な 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
ステートメント自体ではなく、式であることに注意してください。
int
(変数)を読み取り、部分(オーバーロードされた を持っていますinput_var
)を介して読み取りが成功したかどうかを確認します。!(cin >> ...)
istream
operator !
if ( !(cin >> input_var) )
>>
これは、 に対してオーバーロードされた演算子であり、特定のオーバーロードstd::istream&
のタイプに基づいてinput_var
、ストリームからデータを読み取り、 に格納する特定のオーバーロードが呼び出されますinput_var
。演算子オーバーロードの戻り値の型は is です。これは式の型が isでstd::istream&
あることを意味し、orで使用すると、ストリームからの読み取りが成功したかどうかに応じてorに自動的に変換できます。したがって、 andなどのブール式を必要とする任意の構成でこれを記述できます。cin >> input_var
std::istream&
if
while
true
false
if
while
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.
}
cin >> input_var
に保存されている入力をユーザーに求めますinput_var
。整数以外の入力を受け取った場合は、if 条件内に入ります。「変数がintであることを考慮してください。」
演算子は、>>
コンテキストに応じて 2 つの意味を持ちます。
整数を使用する場合は、右シフト演算子にすることができます1024 >> 3
。ビット シフトを実行します。
あなたの場合、それを「抽出演算子」と見なします。から抽出するときcin
、プログラムは標準入力 (通常はキーボード) から読み取り、右側に収まるようにフォーマットしようとします。整数に読み込んでいるので、次の手順を実行します。
+
または-
を正または負の記号として読み取って解釈する何かを読み取って整数を作成できる場合、プロセスは true と評価される何かを返すことになるため、次の行は次のようになります。
if(!(cin >> input_var))
変換が成功したかどうかを確認します。代わりに入力したなど、数値を読み取ることができなかった場合fred
、変換が失敗したため、プロセスは false と評価される何かを返します。返される値は実際にはcin
であり、これは に変換できますが、それはbool
雑草の中に少しあります。
iostream のコンテキストでは、多くの場合、ライターは << と >> をそれぞれ「put-to」または「ストリーム挿入」および「get-from」または「ストリーム抽出」演算子と呼びます。
オペランド間で >> を使用すると、ビットごとの右シフトを意味します
オペレーターです。動作は、input_var によって異なります。こちらをご覧ください: MSDN .
これはオーバーロードされた演算子です。
入力用、抽出演算子としてcin>>value;
ビットごとの右シフトvalue>>2;