我想編寫一個函數來讀取stdin
中的數據。該功能將被其他功能調用以提示用戶輸入數據。丟棄標準輸入流緩衝區中的無關字符
void read_data(void) {
// prompt the user by printing a message
// printf("enter data:\n");
int a;
char name[40];
scanf("%d", &a);
// prompt for input again
scanf("%39[^\n]", name);
// do something with the data
}
爲了使功能read_data
正常工作,不應該有在stdin
流緩存器的任何多餘的字符,即,它應該是空的。該函數不知道在最後一次調用中輸入了什麼,並且輸入緩衝區中可能存在整數和字符。
如何確保函數read_data正常工作?
只需使用'fgets()'並逐行讀取輸入。比scanf()好得多(包括安全!)。 – 2014-01-09 17:44:12
以後不會調用'fgets()'會遇到同樣的問題嗎?如果輸入字符串比我們傳遞給'fgets'的緩衝區長?接下來'fgets'調用將從'stdin'緩衝區開始讀取。 – ajay
'fgets()'吃掉所有尾隨的換行符。如果你傳遞了一個尺寸爲'LINE_MAX'的雜物,那麼它就能保持任何一行。 – 2014-01-09 18:30:03