c语言scanf()读取%c 分隔符的问题

主要是针对“%c”:默认没有任何分隔字符(包括all空白字符)[cy老师说的不对]

情况一

    char a,b;
    scanf("%c%c",&a,&b);
    printf("%c%c",a,b);

则字符输入没有任何分隔符

情况二

    char a,b;
    scanf("%c %c",&a,&b);
    printf("%c%c",a,b);

比较特殊:只要scanf()中字符%c之间出现了任意空白字符,那么在输入端任意空白字符(且不限数量)都作为分隔符{此时的情况就类似“%d%d”了,能够智能识别读取“真”字符}——但是!新的一轮的第一个字符仍会是回车符

综上,以后输入读取多个字符使用情况二更好

  • 处理缓冲区多余无用字符的方法

(1) 清空缓冲区——有一个名为fflush(stdin)的函数,可以用来清空缓冲区。

while(scanf("%c%c",&a,&b)!=EOF)  
    {  
        printf("a=%c,b=%c\n",a,b);  
        fflush(stdin);  
        printf("Input the value of a and b:");  
    }  

即:在空白字符被误读之前将缓冲区暂时清空。
(2)将缓冲区的致错数据读出来(间接清理缓冲区)——getchar() or gets()

对于getchar():读取缓冲区的第一个字符(EOF),该函数的返回值为该字符(EOF==-1)(若返回给整型变量则是它对应的ASCII码)扩展兄弟函数putchar():putchar(ch/int)——此函数输出在终端以参数ch/int(ASCII码)对应的char值
对于gets():获取字符串(读取一行东西)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值