欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux系统中C语言中的清空scanf输入缓冲区

程序员文章站 2022-03-16 17:31:51
...

为什么会单独将字符串的输入拿出来讲,因为字符串和其他的输入来说有一点不同,在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     }

结果:

linux系统中C语言中的清空scanf输入缓冲区
这里问题就在于我想要的是输入1之后,进行加法运算,然后回到选择界面,可这里在进行完之后在我们意料之外输出default的语句。这就是因为输入缓冲区的问题。因为我们使用%c输入,识别到的是两个字符‘1’,‘\n’,所以在我们进行第一次case之后会自动再进行一次default运算。

解决的方法就是:

1. 将char类型改为int;
2. 清空缓冲区,在linux下fflush()不能清空缓冲区,此时,我们选择回收字符就可以解决这个问题;有时候我们可以结合while进行使用;

linux系统中C语言中的清空scanf输入缓冲区

修改后的结果:

linux系统中C语言中的清空scanf输入缓冲区

相关标签: 嵌入式系统