boger—伯格

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

作业题:输入两个整数(12和37),从键盘输入‘A’和‘a’时,输出两个数中的较大数;从键盘输入‘B’和‘b’时,输出两个数中的较小数。

int a;
char c;
scanf("%d",&a);
c = getchar();

我的想法是从键盘输入一个int 赋值给a,然后输入一个char 赋值给c。但是在执行c = getchar()时不用键盘输入,直接执行后续代码。

查阅后发现是getchar()采用了缓冲区,而getch()才是立即获取,所以要想再用getchar()获取正确的值必须先清空缓冲区,如果是windows操作系统,用fflush(stdin)函数或rewind(stdin)函数,包含在stdio.h头文件中,而在linux下,则使用setbuf(stdin,NULL)或者while((c=getchar()) != '\n' && c != EOF);函数,同样是stdio.h头文件中。

int a;
char c;
scanf("%d",&a);
while((c=getchar()) != '\n' && c != EOF);
c = getchar();

修改后得到了理想的结果。

posted on 2022-04-16 12:46  boger—伯格  阅读(57)  评论(0)    收藏  举报