getchar()的作用

以下面的例子做解析

while(scanf("%d%d",&m,&n)!=EOF)
{ getchar();
for(i=1;i<=m;i++)
{
getchar();
for(j=1;j<=n;j++)
{
scanf("%c",&ch);

scanf函数在"%d"控制下不接收回车,只把回车作为接收前面输入的数据的命令,且把回车留在输入缓冲区里。如果后面接着有读取字符的函数,如scanf("%c",&ch);,那么,由于回车('\n')也是字符,接收字符的函数就不等从键盘输入而直接把前面的scanf("%d...);遗留在输入缓冲区里的'\n'接收并赋给对应变量,导致出错;所谓“吃掉”,就是在前面的输入语句遗留了'\n',而在后面的读字符语句之前加一句getchar();,因getchar();也接收一个字符, 就把遗留在缓冲区里的'\n'接收掉以避免后面的字符输入语句出错的意思。

样例代码中由于scanf("%d%d",&m,&n)会把'\n'留在输入缓冲区,而后面又有scanf("%c",&ch);接收字符语句,所以在二者中间加了getchar();起把遗留在缓冲区里'\n'“吃掉”的作用。

接收数字的scanf("%d....)是不接收字母的,它在遇到' '、'\n'、'\t'及字母时认为前面的数字输入完毕,将“跳过”这些符号读取下一个数字(如果有对应接收功能的话),所以不存在这一问题,只有后面跟着接收字符的语句时才有上述弊端。


%s是接收字符串,而%c是接收字符。它们都要以回车来作为接收命令,都会把回车留在缓冲区里。如果后面还有scanf("%s...);,由于scanf("%s...);不接收(实际是接收并扔了)'\n'而不影响正确输入,并继续把第二个'\n'留在缓冲区里。如果后面是scanf("%c"...);,情况就不太一样,因为scanf("%c"...);接收字符,它把'\n'接收掉,缓冲区里也就不再有东西了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值