日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

fflush(stdin)和fflush(stdout)和rewind(stdin)的区别和作用

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fflush(stdin)和fflush(stdout)和rewind(stdin)的区别和作用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

理解:fflush(stdin)和fflush(stdout)和rewind(stdin)
小結(jié)論(多謝網(wǎng)友zhao4zhong1為我解答疑難):
1、在每個(gè)最后不帶\n的printf后面加fflush(stdout);(對標(biāo)準(zhǔn)輸出流進(jìn)行清理,但是它并不是把數(shù)據(jù)丟掉,而是及時(shí)地打印數(shù)據(jù)到屏幕上。)
2、在每個(gè)不想受到輸入(接收)緩沖區(qū)舊內(nèi)容影響的scanf();【或者getchar();或者gets_s();】前面加rewind(stdin);(rewind()函數(shù)的作用是把文件的當(dāng)前位置指針指向文件頭。)
? ?或者添加fflush(stdin);(fflush(stdin)刷新標(biāo)準(zhǔn)輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄[非標(biāo)準(zhǔn)])
3、另外請注意檢查scanf的返回值。


一、fflush(stdin);函數(shù)
? ? ?fflush(stdin)比較容易理解,即清理標(biāo)準(zhǔn)輸入流,把多余的仍未被保存的數(shù)據(jù)丟掉。
比如,下面這個(gè)小程序:

 
  1. void main()

  2. {

  3. int a;

  4. char str[10];

  5. ?
  6. cin>>a;

  7. cout<<a<<endl

  8. ?
  9. ?
  10. // fflush(stdin),

  11. cin>>str;

  12. cout<<str<<endl;

  13. }


目地很簡單:從stdin獲得一個(gè)整數(shù)存入a,接著立馬打印出來;從stdin獲得一個(gè)字符串存入str,也立馬打印出來。但是下面這種可能需要特別考慮:在首行輸入了兩個(gè)整數(shù),在cin>>a之后,stdin緩沖還有一個(gè)整數(shù)沒被讀取。接下來,不等輸入字符串,就直接把上面多出來的數(shù)字存入到str中去并打印。
某種程度上這是操作不規(guī)范造成的,但是程序應(yīng)該要有健壯性,程序員應(yīng)該提前預(yù)防這種不規(guī)范的操作。可以在程序界面上提示“請輸入1個(gè)整數(shù)”,甚至有時(shí)候不厭其煩的強(qiáng)調(diào)和警告也必要。當(dāng)然,本例為求簡單,并不在UI友好方面做文章。這時(shí),可以在cin>>str語句前插入fflush(stdin),如此一來就可以清空標(biāo)準(zhǔn)輸入緩沖里多余的數(shù)據(jù)。


二、fflush(stdout);函數(shù)
小總結(jié):
fflush(stdout)刷新標(biāo)準(zhǔn)輸出緩沖區(qū),把輸出緩沖區(qū)里的東西打印到標(biāo)準(zhǔn)輸出設(shè)備上
printf("。。。。。。。。。。。");后面加fflush(stdout);可提高打印效率
fflush(stdout)跟fflush(stdin)類似,是對標(biāo)準(zhǔn)輸出流的清理,但是它并不是把數(shù)據(jù)丟掉,而是及時(shí)地打印數(shù)據(jù)到屏幕上。為了更好的理解它,需要知道一個(gè)事實(shí):標(biāo)準(zhǔn)輸出是以『行』為單位進(jìn)行的,也即碰到\n才打印數(shù)據(jù)到屏幕。這就可能造成延時(shí),如下面這幾行代碼:

 
  1. <span style="font-size:12px;">int a;

  2. ?
  3. printf_s("input one number:");

  4. fflush(stdout);\\#1

  5. ?
  6. scanf_s("%d",&a);</span>


如果沒有#1那行代碼,在某些平臺上就可能遲遲看不到"input one number"被打印到屏幕上來,因?yàn)樗鼪]有回車。這時(shí)候,fflush(stdout)就起到及時(shí)輸出的作用。
但是在Windows平臺上,似乎并看不出差別來。也即MSFT已經(jīng)將stdout的輸出改成及時(shí)生效了。
fflush函數(shù)被廣泛使用在多線程、網(wǎng)絡(luò)編程的消息處理中。
fflush(stdout):清空輸出緩沖區(qū),并把緩沖區(qū)內(nèi)容輸出


三、下面一段來自360搜索“fflush”:http://baike.so.com/doc/6745731.html
C和C++的標(biāo)準(zhǔn)里從來沒有定義過 fflush(stdin)。也許有人會說:“可是我用 fflush(stdin) 解決了這個(gè)問題,你怎么能說是錯(cuò)的呢?”的確,某些編譯器(如VC6)支持用 fflush(stdin) 來清空輸入緩沖,但是并非所有編譯器都要支持這個(gè)功能(linux下的gcc就不支持,經(jīng)我的GCC4.6.2測試),因?yàn)闃?biāo)準(zhǔn)中根本沒有定義 fflush(stdin)。
MSDN 文檔里也清楚地寫著:
fflush on input stream is an extension to the C standard (fflush 操作輸入流是對C標(biāo)準(zhǔn)的擴(kuò)充)。
以下是 C99 對 fflush 函數(shù)的定義:
int fflush(FILE *stream);
如果stream指向輸出流或者更新流(update stream),并且這個(gè)更新流最近執(zhí)行的操作不是輸入,那么fflush函數(shù)將把任何未被寫入的數(shù)據(jù)寫入stream指向的文件(如標(biāo)準(zhǔn)輸出文件stdout)。否則,fflush函數(shù)的行為是不確定的。fflush(NULL)清空所有輸出流和上面提到的更新流。如果發(fā)生寫錯(cuò)誤,fflush函數(shù)會給那些流打上錯(cuò)誤標(biāo)記,并且返回EOF,否則返回0。

由此可知,如果 stream 指向輸入流(如 stdin),那么 fflush 函數(shù)的行為是不確定的。故而使用 fflush(stdin) 是不正確的。(因此,我姑且得出一個(gè)結(jié)論:我們應(yīng)盡量使用rewind(stdin);來取代fflush(stdin);函數(shù),如此結(jié)論錯(cuò)誤,還請網(wǎng)友指正。)

?


四清空鍵盤緩沖區(qū)的一種好方法!?http://bbs.bccn.net/thread-248420-1-1.html
用 ?rewind(stdin);
語句可以達(dá)到很好的清空鍵盤緩沖區(qū)的作用。不用考慮太多其他因素。這是我在一本名為《軟件開發(fā):編程與設(shè)計(jì)(C語言版)》中所了解到的,作者是USA的David Conger。 ??
以前也了解到其他的清空鍵盤緩沖區(qū)的方法,如:用getchar();fflush(stdin);等。但感覺很麻煩,不好用,也不容易理解。而rewind(stdin)簡單好用,而且是一種可移植的方法。 ?
舉個(gè)例子: ?

 
  1. <span style="font-size:12px;">#include <stdio.h>

  2. int main()

  3. {

  4. int i;

  5. char aString[3];

  6. ?
  7. printf("Please enter some characters:"); /*先向鍵盤緩沖區(qū)里輸入無用字符*/

  8. getchar();

  9. rewind(stdin); /*清空鍵盤緩沖區(qū)里的無用字符*/

  10. printf("Please enter 'OK': "); /*輸入字符串“OK”*/

  11. for(i=0;i<2;i++) /*字符串a(chǎn)String接受字符串“OK”*/

  12. {

  13. aString[i]=getchar();

  14. }

  15. aString[i]='\0';

  16. puts(aString); /*輸出字符串a(chǎn)String*/

  17. return(0);

  18. } </span>


Microsof Visual C++下調(diào)試結(jié)果:
輸入:abcdefghijk回車OK回車?
輸出:OK ?之前緩沖區(qū)里的abcdefghijk垃圾字符都被清空了。?


下面向新手解釋一下rewind(stdin);的工作原理。
C語言把鍵盤,顯示器等設(shè)備當(dāng)做文件來處理,也就是說從鍵盤輸入相當(dāng)于從一個(gè)文件中讀入,向顯示器輸出相當(dāng)于向一個(gè)文件寫出。
而stdin是C標(biāo)準(zhǔn)庫定義的標(biāo)準(zhǔn)文件之一,它與鍵盤相關(guān)聯(lián)。我一般把它理解為指向鍵盤這個(gè)“文件”的指針。
而rewind()函數(shù)的作用是把文件的當(dāng)前位置指針指向文件頭。
兩者結(jié)合,rewind(stdin);的作用也就是把“指向鍵盤(一個(gè)文件)的指針從當(dāng)前位置挪到鍵盤(一個(gè)文件)開頭”,相當(dāng)于拋棄了當(dāng)前鍵盤緩沖區(qū)中的數(shù)據(jù),重新開始輸入。?
雖然并不是真正的把緩沖區(qū)里的數(shù)據(jù)全部清掉,但卻起到了清空鍵盤緩沖區(qū)的效果。

?

?

五、rewind(stdin)和fflush(stdin) 的有什么區(qū)別(意義,用法等等) ?:http://wenda.so.com/q/1378244901061364


語法上 ,?
rewind(stdin) 是把文件指針回繞到文件起始處。?
fflush(stdin) 是把文件輸入緩沖區(qū)清0。?
stdin 是標(biāo)準(zhǔn)輸入設(shè)備(輸入流),通常是鍵盤。(但也可以是通過轉(zhuǎn)向的文本文件。)?
------------?
昨天有人問,數(shù)入123,第2句輸入語句不能工作

 
  1. int a1;

  2. char s[20];

  3. scanf("%d",&a1); //第一句輸入語句

  4. scanf("%[^'\n']",s); // 第2句輸入語句

  5. printf("a1=%d\n s=%s\n",a1,s);


答:添上fflush(stdin); 就可以了。 ?
int a1; char s[20];?
scanf("%d",&a1); //第一句輸入語句?
rewind(stdin);?
// fflush(stdin);?
scanf("%[^'\n']",s); // 第2句輸入語句?
printf("a1=%d\n s=%s\n",a1,s);?
添上 fflush(stdin); 效果相同。

總結(jié)

以上是生活随笔為你收集整理的fflush(stdin)和fflush(stdout)和rewind(stdin)的区别和作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女丝袜合集 | 人妻在线日韩免费视频 | 好吊视频一区二区 | 日韩精品一区二区三区电影 | 17c一起操 | 韩国美女主播跳舞 | 国产日韩中文 | 日韩精品电影在线 | 秋霞在线观看视频 | 国产精品毛片一区 | 不良视频在线观看 | 欧美日韩操 | 亚欧美精品 | av中亚 | 黄色成人免费网站 | 欧美体内谢she精2性欧美 | 欧美精品黄色片 | 亚洲精品成人无码毛片 | 成人性生交大片免费看r链接 | 丁香花激情网 | 悟空影视大全免费高清观看在线 | 免费看v片| 高清无码一区二区在线观看吞精 | 欧美老少做受xxxx高潮 | 色91精品久久久久久久久 | 亚洲第一在线视频 | 激情欧美一区二区免费视频 | 欧美aaaaaaaaa | 超碰日日干 | 国产成人精品av | 人人搞人人干 | av免费入口 | 亚洲大片免费看 | 国模大尺度视频 | 一本大道久久久久精品嫩草 | 中文字幕一区二区三区四区视频 | 成人午夜影院在线观看 | 国产91精品一区二区 | 狠狠一区二区 | 波多野结衣1区2区3区 | 国产一区一区 | 无码人妻丰满熟妇精品 | 免费久久精品视频 | 亚欧在线免费观看 | 国产伦精品一区二区三区妓女下载 | 天天躁夜夜躁狠狠躁 | 国产aⅴ | 操操干干 | 一区二区三区在线视频免费观看 | 337p粉嫩日本欧洲亚洲大胆 | 麻豆蜜桃av| av在线不卡网站 | 亚洲涩涩图 | 久久精品99久久久久久 | 国产乱人 | 亚洲AV第二区国产精品 | 久久久久久69 | 在线观看欧美成人 | 久久青青草原亚洲av无码麻豆 | 艳妇臀荡乳欲伦交换在线看 | 爱福利视频广场 | 欧美性猛片aaaaaaa做受 | 蜜臀一区二区三区精品免费视频 | 欧美激情aaa| 调教一区二区三区 | 精品无码av一区二区三区不卡 | av高清一区 | 曰批又黄又爽免费视频 | 国产裸体视频 | 精品午夜一区二区 | 国产又黄又骚 | 日本h在线观看 | 自拍偷拍av | 中文在线www | 丝袜制服一区 | 久久久久亚洲AV成人网人人小说 | 国产精品一区二区小说 | 欧美aa在线| 青青草在线免费观看 | 成人羞羞在线观看网站 | 91调教视频| 亚洲熟妇一区 | 最新国产网站 | 亚洲一区自拍偷拍 | 国产日韩欧美日韩大片 | 色综合激情 | 亚洲成av人片一区二区梦乃 | 国产精品午夜久久 | 国偷自拍| 中文字幕一二三区 | 亚洲特级片 | 亚洲国产精品无码久久久久高潮 | 日韩精品视频在线观看网站 | 风间由美在线视频 | 国产欧美日韩一区 | 午夜视频黄 | 亚洲 欧美 日韩系列 | 亚洲自拍偷拍综合 | 成人福利午夜 |