回车被scanf吸收问题——getchar()来解决
1.问题描述:

如上图的程序进行了两次for循环,同时会执行两次scanf输入。
在or循环第一次时,需要进行第一次scanf输入,每次scanf输入一次数据需要按一次回车,程序才会继续往后走,而后才会进入接下来的if和else的判断语句。
在for第二次循环时,由于第一次for循环进行的第一次scanf输入,我们输入了一次数据,并按了一次回车。这个回车,它导致我们第二次for循环中的第二次scanf输入功能失效。通俗讲就是第二次循环的scanf它以为我们第一次的回车是我们输入的数据,第二次循环中的scanf它吸收了我们第一次按的回车按键然后结束了,导致直接跳过了我们的第二次scanf,我们称它为回车被scanf吸收问题。
2.解决方案:
用getchar()先把回车给吸收掉,再进入下一次循环的scanf。
(下面是例程代码,直接复制就可以执行,我们可以尝试把getchar()删掉看看有和没有的区别)
详细解释:
针对这个问题,我们要在进行第一次scanf输入完数据后按了回车后,我们要把这个回车先吸收掉,再进入下一次循环中的scanf输入。所以在每次for循环后面用getchar假装获取个输入,把这个回车当作输入吸收掉,然后再进入下一次循环scanf。
3.例程代码:
#include <stdio.h>
struct Person
{
char name[32];
int age;
char zhiYe;
char addr[32];
union

最低0.47元/天 解锁文章
1116

被折叠的 条评论
为什么被折叠?



