c++におけるcinの動作手順

1546 ワード

c++を初めて勉強して、cinの仕事の流れが何なのかずっと知らなかったので、今日研究してみました.ちょっとした収穫があります.
このコードを例にとると
#include 
#include 
#include 
using namespace std;

/*  :
             。
           ,          ,           。
  :
               。          。
      “I am a student.”,   “student. a am I”。*/

int main()
{
	vector v;
	string str;

	//     vector  
	cout << "Enter sentence(Ctrl + Z to end):" << endl;
	while(cin >> str)
	{
		v.push_back(str);
	}

	//       ,       
	if(v.size() == 0)
	{
		cout << "No element!" << endl;
		return -1;
	}

	//        
	for(vector::size_type ix = v.size() - 1; ix >= 0; --ix)
	{
		cout << v[ix] << " ";
	}
	cout << endl;
	return 0;
}

テキストの読み込み段階では、I am a studentを入力します.車に戻ったらCtrl+zを入力してから車に戻ります.初めてEnterを押した後、文全体を入力バッファに入れます(含まない
Ctrl+z)を押しながら、1番目のEnterを押すことでcinは入力バッファの文字の検出を開始し、1番目のスペースの前の「I」をstrに取り出してループを実行し、終了後に2番目のスペースの前の「am」を取り出し、文の処理が終了するまで同様の処理を行う.入力バッファにデータがありません.このとき2番目のEnterに遭遇し、バッファが空であることを検出し、
Ctrl+z(バッファにいない)はループを飛び出し、次の文を実行します.
注意すべき点はいくつかあります.
1.スペース、tabとEnterは文字間の区切り文字として使用できます
2.Enterのみがバッファをリフレッシュでき、入力した文字をバッファに入れて処理を開始する.Enterを押す前に、入力した文字は処理されず、文字列を入力するたびに処理されたり、区切り文字にぶつかったりするのではありません.
3.ctrl+zは文字を生成せず、バッファにも入らず、while(cin>>str)という形式でループを終了するのが一般的です.
4.ctrl+zはバッファが空の場合にのみ機能します.これは、Enterを2回押す理由です.1回目のEnterはバッファ内のデータをすべて処理して空にし、2回目のEnterはcinをトリガしてctrl+zを検出し、このときバッファが空になったのでループから飛び出します