我正在使用我創建的宏來清除scanf後的緩衝區,但我被告知這不是一個好主意,因爲「很多原因」。你能解釋一下爲什麼以及如何清理它?我知道使用fflush(stdin)是一個非常糟糕的主意,因爲它沒有被定義。使用C中的宏清除緩衝區是不是一個好主意?
這是我用的宏:
#define CLEAR_BUFFER do { c = getchar(); } while (c != '\n' && c != EOF);
而且也,另一個問題:在「現實世界」中使用scanf函數?如果是的話,人們如何清理緩衝區?
感謝
如果您在閱讀某些內容後遇到空格或換行符問題,可以在'%d','%f'或類似內容之前放置一個空格,例如, 'scanf(「%d」,x)' – humodz 2014-11-22 13:24:59
對於用戶輸入,使用'fgets()'來獲取數據並很好地處理線路緩衝輸入流。 – pmg 2014-11-22 13:32:42
@ pmg爲健壯的代碼,fgets也需要清理,因爲行可能會超過緩衝區大小 – 2014-11-22 14:00:14