scanf的回車干擾問題

小白愛吃核桃發表於2020-11-16

問題描述:

學習資料結構,寫程式碼的時候,突然遇到了一個問題,連續的輸入不受我控制了,沒錯是這樣的,scanf()函式我不會用了!

經過除錯我發現了在我輸入時,多出一個回車給我的變數附了值,沒錯,我就是碰到了典型的scanf函式輸入緩衝區的問題。

程式如下:

int a,b,c;
printf("輸入a和b");
scanf("%d%d",&a,&b);
printf("輸入c");
scanf("%d",&c);

當我輸入: 1  2  回車 之後,程式直接列印了 "輸入c" 後,結束了!!!???我還沒輸入c呢。

查詢賦值情況:a = 1 ; b = 2; c = \n(回車)

也就是上一次輸入的回車符號\n,儲存在了緩衝區 ,下一步直接賦值給c了。

我的解決辦法:吸收回車

  1. 在scanf("%d",&c)前邊加一個getchar()

  2. 將scanf("%d",&c)改成scanf("  %d",&c),在%d前邊加一個空格

  3. 將scanf("%d",&c)改成scanf("\n%d",&c),在%d前邊加一個\n

 

提示:查詢解決辦法有一種使用fflush(stdin)清除快取區的辦法,我這裡並不適用!

相關文章