C++ cin.sync()的作用到底是什么?不是說清空緩沖區嗎?為什么會出現無限循環?#include "stdafx.h"#include <iostream>#include <string>int main(){int value, i = 0;char c;std::string str;std::cout << "輸入一個數值:";while (!(std::cin >> value)){str = { 0 };std::cin.clear();std::cin.sync();//出現無限循環的情況//std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');//這個清除一行就有效// while ((c = std::cin.get()) != '\n') // str += c; //把緩沖區的寫到str//std::cout << "str:" << str << std::endl;std::cout << "輸入有誤,重新輸入:";}std::cout << "輸入成功了!" << std::endl;;}輸入的字符,讀取到str還是完整的,哪有清空?這是為什么?是我理解錯了嗎?
1 回答

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
上面的代碼注釋掉str = { 0 };//至少在vs其他版本里這句是通不過編譯的
在vs2012上,沒有出現循環,你可以再建一個工程試試還是不是有同樣情況,如果還是這種情況,應該就是vs2015無法這么用。
std::cin.sync();//這個東西的原意是同步輸入流,而不是清空緩沖區,在不同編譯器里的實現可能不同,也就是說上面清空的寫法是特殊情況下才成立的
你可以測試用fflush(stdin);代替,c里的函數
ignore清除一行已經可以了,難道你cin里還能同時輸入多行,而且這個函數沒有那么多問題
- 1 回答
- 0 關注
- 308 瀏覽
添加回答
舉報
0/150
提交
取消