C - SCANF 后面的 getchar(读取整数)将 scanf 的终止"Enter"键作为字符



当我有一个 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 返回。打印"输入字符"后屏幕甚至不会停止。正确的方法是什么?

使用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()

最新更新