项目场景:
getchar吸收回车符
问题描述
#include <stdio.h>
int main()
{
int data;
char cdata;
puts("请输入一个整数:");
scanf("%d",&data);
switch(data){
case 1:
case 2:
case 3:
puts("满足了条件1,2,3的情况");
break;
case 4:
puts("满足了条件4的情况");
//break;
case 5:
puts("满足了条件5的情况");
break;
default:
puts("其他非列表中的情况");
}
printf("请输入一个字符:\n");
scanf("%c",&cdata);
switch(cdata){
case 'a':
puts("满足条件a的情况");
break;
case 'b':
puts("满足条件b的情况");
break;
default:
puts("其他非列表中的情况");
}
return 0;
}
代码不停留,直接在输入一个整数执行完后就结束,第二个scanf扫描器没有与人进行交互
原因分析:
如上图代码所示,第一个puts函数提示输入整数后,scanf扫描器的到一个整数要按回车执行后面的代码,然后后面一个scanf扫描器要求输入一个字符,此时上面的的回车符就跑到下面的扫描器中去了,而没有实现我们原本想要输入的字符输入
解决方案:
#include <stdio.h>
int main()
{
int data;
char cdata;
puts("请输入一个整数:");
scanf("%d",&data);
switch(data){
case 1:
case 2:
case 3:
puts("满足了条件1,2,3的情况");
break;
case 4:
puts("满足了条件4的情况");
//break;
case 5:
puts("满足了条件5的情况");
break;
default:
puts("其他非列表中的情况");
}
printf("请输入一个字符:\n");
getchar();//注意:要用一个getchar()来吸收回车符,防止回车符进入到scanf中导致程序不停留
scanf("%c",&cdata);
switch(cdata){
case 'a':
puts("满足条件a的情况");
break;
case 'b':
puts("满足条件b的情况");
break;
default:
puts("其他非列表中的情况");
}
return 0;
}
如代码图所示,在第二个scanf扫描器的前面加一个getchar函数用于吸收上面留下来得回车符,吸收之后就不影响我们后面代码的执行了