scanf之后的getchar(读取整数)将scanf的终止“输入”键作为字符

时间:2018-08-23 01:36:16

标签: c scanf

当我有一个scanf后跟一个getchar时,为什么getchar总是一直获取scanf的最后一个定界字符?我该如何阻止呢?我尝试研究scanf的“格式说明符”,阅读了很多东西,但没有一个能解决这个问题。

代码如下所示-

#include <stdio.h>
#include <conio.h>

int main()
{
    int a;
    char b;

    printf ("Enter an integer \n");
    scanf_s(" %d", &a);

    printf("Enter a character \n");
    b = getchar();

    printf("The integer you entered is %d \n", a);
    printf("The character you entered is %c \n", b);

    _getch();
    return 0;
}

输出如下- 输入一个整数 4563 输入一个字符 您输入的整数是4563 您输入的字符是

getchar将返回我在整数输入末尾按下的回车键。打印“输入字符”后,屏幕甚至没有停止。正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

使用scanf(" %c", &b)代替getchar()

当您在%c之前放置空格时,请清洁缓冲区

或者您也可以使用此方法清洗缓冲区:

int ch;
while ((ch = getchar()) != '\n' && ch != EOF);

完整示例:

int main(void)
{
    printf("Enter an integer \n");
    int a;
    scanf(" %d", &a);
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF) {
    }

    printf("Enter a character \n");
    char b = getchar();

    printf("The integer you entered is %d \n", a);
    printf("The character you entered is %c \n", b);

    _getch();
}

但是我认为scanf()