【发布时间】:2018-08-23 01:36:16
【问题描述】:
当我有一个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 不要混合scanf和其他输入函数
-
分隔符(通常是换行符)不是通过调用
scanf()输入的,而是留在标准输入中。消除分隔符的最简单/典型的方法是在调用scanf()之后使用类似:int ch; while( (ch = getchar() ) != EOF && ch != 'delimiter' ) ;通常分隔符是换行符,因此“分隔符”将是“\n”` -
@user3629249:添加虚拟 getchar 只是为了避免分隔符 - 这不是补丁吗?没有副作用吗?