問題
今天有人問了這樣一個問題,如何不讓scanf取得指定長度後剩下的字元,被下一個scanf取得
解法
首先我想到的是scanf一個字串,可是如果字串長度剛好,就會造成要再輸入一次,於是我又想到了fflush來清空stdin的緩衝區,查了MSDN,也寫了一個小程式來測試,果然可行,但是…
但是
但是有人說fflush(stdin)不合C語言標準,起先我懷疑真的是這樣嗎? 因為我查MSDN是這樣寫沒錯阿,還有範例示範呢
/* FFLUSH.C */ #include #include void main( void ) { int integer; char string[81]; /* Read each word as a string. */ printf( "Enter a sentence of four words with scanf: " ); for( integer = 0; integer < 4; integer++ ) { scanf( "%s", string ); printf( "%s\n", string ); } /* You must flush the input buffer before using gets. */ fflush( stdin ); printf( "Enter the same sentence with gets: " ); gets( string ); printf( "%s\n", string ); }
上網一找,找到文章說fflush果然不是標準
正確的做法應該要自己一個一個地吃掉字元,話說M$真的很不愛守標準,我一直都很相信MSDN,沒想到今天被它給騙了 囧rz,下次看MSDN應該要帶一點懷疑,不過不可否認地,在這裡這樣的不標準確實比標準來得方便


這個問題我也碰過. 問題是. 當用getch 一個一個把字吃掉. 最後沒輸入. 程式會block 住. 真不知道怎麼解決.
可以用 _getch() 來自己寫一個 scanf 之類的,不過會花很多功夫,而且 _getch() 好像也不是標準。