次のコードは、stdinから文字を読み込み、EOF(ctrl-z) 。C++は文字を取得するためにcin.getを使用しますが、EOFに遭遇したときにwhileループを終了しません
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
string article ;
char nextChar;
while(cin.get(nextChar)) {
if(cin.eof()) break ;
article.append(1, nextChar) ;
}
cout << article ;
system("pause") ;
}
私はこのような入力テスト:
I am a student.<ctrl-z>
をそして私は、Enterキーを押しますが、それは停止しません。
別の[ctrl-z]と入力してからneterを押すと、
whileループから終了できます。
最初の[ctrl-z]がeof条件を通知しないのはなぜですか?
'EOF'の' Ctrl-D'を試してください。 ( 'Ctrl-Z'はしばしば「プロセスを一時停止する」)。 – Galik
@Galik:それは環境特有のものです。 ASCII 26はEOFマーカーですが、Windows以外のOSの端末ではCtrl + Zを押しても通常ASCII 26は生成されません。 –