在循环中有gets和scanf语句为什么要在scanf后面加一个getchar,有其他解决办法嘛

int main()
{
    int a, b;
    for (int i = 0; i < 2; i++)
    {
        char arr[10];
        gets(arr);
        scanf_s("%d", &a);
        getchar();
        puts(arr);
        printf("%d ", a);
        printf("\n");
    }
}

img


这个是有getchar

int main()
{    
    int a, b;
    for (int i = 0; i < 2; i++)
    {
        char arr[10];
        gets(arr);
        scanf_s("%d", &a);
        //getchar();
        puts(arr);
        printf("%d ", a);
        printf("\n");
    }
}

这个是没有getchar

img

不懂为什么getchar会影响后续的输出输入结果



scanf输入时,你输入了你的数值x,之后回车表示输入完成
但是这时,对终端而言,你输入的是x和一个回车
当按照scanf进行了x的读取后,还剩一个回车,此时直接进行gets()就会从缓冲区中读取到这个回车。
如果想不使用gets()或getchar(),那你就得补充一个清理缓冲区的语句

就是把输入流里的换行 吃掉,防止影响下一次输入