亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問有誰知道C++ cin.sync()的作用到底是什么?

請問有誰知道C++ cin.sync()的作用到底是什么?

揚帆大魚 2021-12-10 11:07:32
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個贊

  1. 上面的代碼注釋掉str = { 0 };//至少在vs其他版本里這句是通不過編譯的

  2. 在vs2012上,沒有出現循環,你可以再建一個工程試試還是不是有同樣情況,如果還是這種情況,應該就是vs2015無法這么用。

  3. std::cin.sync();//這個東西的原意是同步輸入流,而不是清空緩沖區,在不同編譯器里的實現可能不同,也就是說上面清空的寫法是特殊情況下才成立的

  4. 你可以測試用fflush(stdin);代替,c里的函數

  5. ignore清除一行已經可以了,難道你cin里還能同時輸入多行,而且這個函數沒有那么多問題


查看完整回答
反對 回復 2021-12-13
  • 1 回答
  • 0 關注
  • 308 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號