光阴似箭催人老,日月如移越少年。
1. Ctrl Z が単独の行にある場合、またはその前に文字 (スペースを含む) がない場合、それは意味のない文字として認識されます。 Windows での定義はプログラムとは何の関係もありません。
2.endl は更新ストリームです。 cin はエラーが発生したときに飛び出す while ループであるため、cin.clear() でステータス ビットをリフレッシュすることなく入力を再入力する方法はありません。 2 番目のプログラムは、データがまだストリーム内にあるためではなく、最初の while の実行後に入力データがグローバル オブジェクト p2 に保存されるため、最初に入力された文字を出力します。これは、リセット状態がないためです。 、プログラムを直接実行します 2 番目の while ループはスキップされ、p2 の内容が直接出力されます
解決策: 2 つの while ループの間に cin.clear() と cin.sync() を追加します (新しい行で ctrl z を入力したくない場合は、cin.ignore() を追加することもできます)
linxu: Ctrl D から EOF
Ctrl D
EOF
ウィンドウは Ctrl Z から EOF
Ctrl Z
cin.clear()
Linux では、新しい行の先頭で Ctrl-D を押すと EOF を意味します (行の途中で Ctrl-D を押すと、「標準入力」バッファ領域を出力することになるため、これはCtrl D を 2 回押す必要があります); Windows では、 は EOF を意味します。 (ちなみに、Linux で Ctrl-Z を押すと、プロセスが中断され、バックグラウンドで一時停止されます。fg コマンドを使用すると、フォアグラウンドに戻すことができます。Ctrl-C を押すと、プロセスが終了します。) Ctrl-Z では、本当に Ctrl-D を入力したい場合はどうすればよいでしょうか?このとき、最初に Ctrl-V を押してから、Ctrl-D を押す必要があります。システムはこれを EOF 信号とは認識しません。 Ctrl-V は、次の入力を「文字通り」解釈することを意味します。Ctrl-V を「文字通り」入力したい場合は、続けて 2 回入力するだけです。 ルアン先生から引用された EOF とは何ですか?
Linux では、新しい行の先頭で Ctrl-D を押すと EOF を意味します (行の途中で Ctrl-D を押すと、「標準入力」バッファ領域を出力することになるため、これはCtrl D を 2 回押す必要があります);
Ctrl-Z
ルアン先生から引用された EOF とは何ですか?
1. Ctrl Z が単独の行にある場合、またはその前に文字 (スペースを含む) がない場合、それは意味のない文字として認識されます。 Windows での定義はプログラムとは何の関係もありません。
2.endl は更新ストリームです。 cin はエラーが発生したときに飛び出す while ループであるため、cin.clear() でステータス ビットをリフレッシュすることなく入力を再入力する方法はありません。 2 番目のプログラムは、データがまだストリーム内にあるためではなく、最初の while の実行後に入力データがグローバル オブジェクト p2 に保存されるため、最初に入力された文字を出力します。これは、リセット状態がないためです。 、プログラムを直接実行します 2 番目の while ループはスキップされ、p2 の内容が直接出力されます
解決策: 2 つの while ループの間に cin.clear() と cin.sync() を追加します (新しい行で ctrl z を入力したくない場合は、cin.ignore() を追加することもできます)
linxu:
Ctrl D
からEOF
ウィンドウは
Ctrl Z
からEOF
cin.clear()
をコードに追加します リーリーEOF の入力