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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ACM的fflush(stdin)的问题

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACM的fflush(stdin)的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 在最近的刷題過程中,因為用到了很多字符串的操作,有時需要多次清空緩沖區,所以用了fflush(stdin);的語句,確實很好用,但是發現在OJ上提交后會出現runtime error的問題。當時并沒有在意是fflush(stdin);的問題,調試好多次后發現會產生runtime錯誤的代碼,于是對fflush(stdin);產生了疑心。

?

? ? 上網查閱資料后發現(轉自https://my.oschina.net/deanzhao/blog/79790):其實C和C++的標準里從來沒有定義過 fflush(stdin)。某些編譯器(如VC6)支持用 fflush(stdin) 來清空輸入緩沖,但是并非所有編譯器都要支持這個功能(linux 下的 gcc 就不支持),因為標準中根本沒有定義 fflush(stdin)。MSDN 文檔里 也清楚地寫著fflush on input stream is an extension to the C standard(fflush 操作輸入流是對 C 標準的擴充)。當然,如果你毫不在乎程序的移植性,用 fflush(stdin) 也沒什么大問題。

  但是最重要的是ACM就是為了解決普遍存在的問題,所以必須要有最好的可移植性,對任何問題都很敏感,所以一定不能使用?fflush(stdin) 了,那么怎么清空緩沖區呢?

  使用循環讀取輸入緩沖區的方法,將緩沖區內數據全部讀完,即清空,代碼 ?

  while?(?(c?=?getchar())?!=?'\n'?&&?c?!=?EOF?)?;

  即可。

  另附runtime error的其它可能錯誤:

?

     ?①除以零

?

    ②數組越界:int?a[3];?a[10000000]=10;

?

    ③指針越界:int?*?p;?p=(int?*)malloc(5?*?sizeof(int));?*(p+1000000)=10;

?

    ④使用已經釋放的空間:int?*?p;?p=(int?*)malloc(5?*?sizeof(int));free(p);?*p=10;

?

    ⑤數組開得太大,超出了棧的范圍,造成棧溢出:int?a[100000000];

    (第五個錯誤在編譯時一般會提示錯誤,第五個數組定義為全局變量即可)

?

?

?

轉載于:https://www.cnblogs.com/hgcrown/p/6480007.html

總結

以上是生活随笔為你收集整理的ACM的fflush(stdin)的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。