程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 關於c++的輸入

關於c++的輸入

編輯:C++入門知識

vector<int> iv1, iv2;
 cout << "請為第一個vector容器裝填整數元素,以s結尾:" << endl;
 int num = 0;
 while(cin >> num)
 {
  iv1.push_back(num);
 }
 print(iv1.begin(), iv1.end());   // 自己寫的打印容器函數

 //cin.clear();
 //cin.sync();

 cout << "請為第二個vector容器裝填整數元素,以s結尾:" << endl;
 while(cin >> num)
 {
  iv2.push_back(num);
 }
 cout << "iv2: " << endl;
 print(iv2.begin(), iv2.end());

  上面這段代碼在為第一個容器填入數據之後,再為第二個容器填入數據時會直接跳過循環,直接輸出第二個容器。

  下面附上我的調試過程:

  1.加上cin.clear() 調試,無效。 // clear函數用來把錯誤狀態修正,因為第一次循環中有cin>>num,輸入了s對應的類型不對,所以會有錯誤狀態

  2.加上了cin.get(),還是無效,我的想法是會不會是我輸入的s這個字符還在緩沖區,用cin.get()吃掉,仍然失敗。。。

  3.沒轍了,用c語言的清除緩沖區:scanf("%*[^\n]");scanf("%*c");沒用。。。

  4.百度搜了一下,發現了一個函數cin.sync();准確的講是sync()函數,完美解決問題,這個就是輸入流的清除緩沖區函數.

  5.今天早上來完善後備功能時,仔細想了想,昨天用cin.get()時真的把字符s清掉了嗎?沒有!!!因為我打完s之後有一個回車鍵,所以要兩個cin.get()才能吃掉字符s.

算是告一段落吧,總之cin.clear()清除錯誤狀態,cin,sync()是清緩沖區。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved