为什么输入字符型字母要同时运用scanf和getchar才能成功?

2025-02-26 07:30:25
推荐回答(2个)
回答1:

因为scanf("%c", &ch);只接收一个字符,会把输入的'\n'留在输入缓冲区;而'\n'也是字符,后面的输入语句会把它接收而收不到你输入的有用字符,所以会出错。写成scanf("%c", &ch);getchar();后getchar();会把遗留在缓冲区中的那个'\n'接收掉,就不会出错了。但你scanf("%c", &ch);ch=getchar();这样写也不行,ch就只是个'\n'了,后面就用不成ch了,把ch=去掉就可以了……

回答2:

可能是我俩用的环境不同,code:blocks可以单独用他们,在scanf前面经常加一个getchar,是因为,如果在scanf之前有其他输入,在最后输入enter时,是个字符,会被scanf读取,用getchar是用来吃enter的,
#include
#include
#include
using namespace std;
int main()
{
char c,a;
c=getchar();
getchar();//用来吃掉上一句的enter,如果不加,那么a字符就是enter了
scanf("%c",&a);
printf("%c %c \n",c,a);
return 0;
}

getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,