我使用fgets()來獲取用戶輸入,然後使用sscanf()將它解析爲一個double。這是我的示例代碼:fgets()越過,如何清除用戶輸入?
int menuItem = 0;
char input[3];
printf("Enter valid menu item"); //values are 1, 2, 3, 4, 5, and -1
fgets(input, sizeof input, stdin);
sscanf(input, "%d", &menuItem);
如果用戶輸入3位數字(無效的輸入,我要相應地處理它)時出現錯誤時,它通過自動地將所述第三位數字作爲跳過我的下一個與fgets()下一個輸入。例如,如果用戶inters 123,它現在將跳過下一個fgets並使用值3作爲輸入。我怎樣才能清除這個,或者最多隻能讀取1位數字(但仍然能夠處理-1)。
不錯的想法 - 我想你是正確的,反正輸入那麼多數字是一個難得的機會。我想我很可能會按照你的建議去做,但出於好奇,我會如何處理這樣的錯誤呢?也就是說,我輸入[50],然後輸入80個字符。我需要做些什麼才能從緩衝區中清除那些額外的內容,以便它們不會自動放入下一個fgets()中? –
由於'fgets'將換行符視爲有效,因此可以在字符串中使用換行符。因此,您應該始終爲您期望的角色留出足夠的空間,再加上一個換行符,再加上一個NULL結束符。一旦你有了自己的價值,搜索'\ n'。如果你沒有找到它,請再次調用fgets(並重復)。只有在讀取了最大字符數的情況下,才應該這樣做。這可能會在特殊情況下(例如Ctrl-D)或其他早期EOF(如果讀取文件或管道)導致問題。它還需要特別的關注,因爲換行符在操作系統中各不相同。 – paddy