1
這個問題很基本,但我找不到答案,所以我決定在這裏提問。如何忽略輸入緩衝區中的一個換行符,並讓scanf返回一個值?
基本上我有下面的代碼....
while (scanf(" %*[^\n]%d%c", &a, &c) != 2 || c != '\n' || a > max || a < min) {
printf("Error! Try again.");
}
...和我嘗試用它做的是確保,如果他們輸入了不正確的值,用戶得到的錯誤消息,隨後出現一個新的scanf提示符。我在大部分時間裏都有這個循環的工作,但是如果我按下回車而沒有任何其他輸入(只在輸入緩衝區中保留'\ n'),scanf只是等待更多的輸入而不是終止和返回一個值。雖然我明白這是正常的,如果scanf不符合任何條件讓它返回給調用者,我一直很難迫使它終止在其緩衝區中的單個換行符。在這裏我假定在第一個格式說明符之前留出一個空格會有幫助(這樣可以忽略單個換行符),但無論出於何種原因,它似乎都沒有幫助。有人知道我可以如何解決這個問題,同時保持現有代碼相同(如果可能的話)?
據_possible_與'scanf函數解決這個()'和更多的代碼,但不值得。作爲第一步,使用'fgets()'](http://stackoverflow.com/a/33811420/2410359)或者'getline()'如果在* nix上。然後'strtol()'或者'sscanf()'等等。例子:http://stackoverflow.com/a/22544609/2410359 – chux