今天在用scanf过程中遇到一个问题。两段代码里边都有scanf函数,但是第一个scanf在控制台输入参数之后,第二个scanf都没有提示输入就直接运行结束了,先看问题代码吧,如图:
<span style="font-size:24px;">//程序1
printf("给朕在控制台输入一个字符\n");
char letter;
scanf("%c", &letter);
if (letter == 'm') {
printf("这是一个男的\n");
}
//程序2
printf("请输入一个字符\n");
char gender;
scanf("%c", &gender);
if (gender == 'm') {
printf("这是个男的\n");
} else {
printf("这是个女的\n");
}</span>看下执行结果:
还没等我在第二段程序执行的时候输入字符,程序就执行结束了。
上边看似很简单的两段代码,但是里边隐含了一个平常不容易遇到的问题:垃圾字符。也就是说程序1运行的时候,需要在控制台输入一个字符letter。当输入完字符之后,我们按了下回车让程序继续运行。这个时候回车符号被存到了缓存中,当执行程序2的时候需要再输入字符gender的时候系统把回车符赋给了gender,所以导致程序2没有提示你输入字符就提前结束了。
解决方法:
在程序1和程序2中间添加一个getchar();方法即可。下边说一下getchar();的作用:
1.从缓冲区读走一个字符,相当于清除缓冲区
2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n',所以如果不在此加一个getchar()把这个回车符取走的话,就会导致上边的问题出现第二个scanf把缓冲区的回车符取走,从而导致读取有误。
版权声明:本文为CrazyZhang1990原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。