linux系統中C語言中的清空scanf輸入緩衝區

爲什麼會單獨將字符串的輸入拿出來講,因爲字符串和其他的輸入來說有一點不同,在C語言中,從鍵盤輸入有多個函數

  1. scanf:和 printf()類似,scanf()可以輸入多種類型的數據。
  2. getchar()、getche()、getch():這三個函數用於輸入單個字符。
  3. gets():獲取一行數據,作爲字符串處理

scanf 函數

  1 #include <stdio.h>
  2 #include <string.h>
  3 void sum();
  4 void sub();
  5 
  6 void sum()
  7 {
  8     int sum,a,b,c;
  9     printf("請輸入第一個數\r\n");
 10     scanf("%d",&a);
 11     printf("請輸入第二個數\r\n");
 12     scanf("%d",&b);
 13     sum=a+b;
 14     printf("相加的值爲%d\r\n",sum);
 		c=getchar();
 15 }
 16 void sub()
 17 {
 18     char arr[]={'z','h','a','n','g'};
 19     char arr1[]="zhang";
 20     long la=sizeof(arr);
 21     long la1=sizeof(arr1);
 22     printf("%ld,%ld\r\n",la,la1);
 23 }
 24 
 25 int main()
 26 {
 27     char choose;
 28     while(1)
 29		{
 30         printf("*************************************************\r\n");
 31         printf("            歡迎來到個性化計算器\r\n");
 32         printf("          請根據提示選擇相應的操作\r\n");
 33         printf("   1:加法 2:減法  3:乘法  4:除法  5:取模\r\n");
 34         printf("          請輸入您的計算法則\r\n");
 35         printf("*************************************************\r\n");
 36 
 37         scanf("%c",&choose);
 38         switch(choose)
 39         {
 40             case '1':
 41                 printf("加法運算\r\n");
 42                 sum();
 43                 break;
 44             case '2':
 45                 printf("減法運算\r\n");
 46                 sub();
 47                 break;
 48             case '3':
 49                 printf("乘法運算\r\n");
 50                 break;
 51             case '4':
 52                 printf("除法運算\r\n");
 53                 break;
 54             case '5':
 55                 printf("取模運算\r\n");
 56                 break;
 57             case '0':
 58                 printf("程序將在3秒後退出\r\n");
 59                 sleep(3);
 60                 return 0;
 61             default:
 62                 printf("輸入數據不合法,請重新輸入\r\n");
 63                 break;
 64         }
 65     }
 66     return 0;
 67     }

結果:

在這裏插入圖片描述
這裏問題就在於我想要的是輸入1之後,進行加法運算,然後回到選擇界面,可這裏在進行完之後在我們意料之外輸出default的語句。這就是因爲輸入緩衝區的問題。因爲我們使用%c輸入,識別到的是兩個字符‘1’,‘\n’,所以在我們進行第一次case之後會自動再進行一次default運算。

解決的方法就是:

1. 將char類型改爲int;
2. 清空緩衝區,在linux下fflush()不能清空緩衝區,此時,我們選擇回收字符就可以解決這個問題;有時候我們可以結合while進行使用;

在這裏插入圖片描述

修改後的結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章