关于字符的读入与输出

在笔试中,经常见到字符的读入与输出的题目。逆序打印输入时最常见、最基本的考题,复杂点的就是统计单词、逆序打印单词之类的。难点是如何判断输入的结束,如果用getchar函数,其输入结束符为EOF(其打印值为-1),c=getchar(); //c的类型为Int型,因为EOF==-1,那么scanf函数的使用方法呢?

#include<stdio.h>
int main()
{
       int i;
       char ch;
       for(i=0;i<=3;i++)
       {
              printf("%d ---- ",i);
              scanf("%c", &ch);
              printf("/n");
       }
        return 0;
}
运行结果:
0 ---- a
1 ----
2 ---- b
3 ----
产生其原因在于:
因为 scanf %c 只是读入一个字符,而你在输入时实际上输入的是:某个字符
+Enter,Enter 产生的/n 也会停留在输入缓冲区中,下次调用 scanf %c 时就会直接读到
它而不是等待你再次输入!同理,getchar()也有类似的行为。所以我们才不提倡使用
scanf("%c", ...),尤其是把它在循环中。
解决的方法:
(1)、将 scanf("%c", &ch); 修改为:
        scanf(" %c", &ch);   /*在%前加上一个空格*/
(2)、将 scanf("%c", &ch); 修改为:
        scanf("%c%*c", &ch);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值