为scanf()耗费的半天

本文探讨了使用scanf函数时遇到的%c字符读取问题,并提供了两种解决方案:一是通过添加 来避免%c读取空格;二是利用getchar清除缓冲区,调整输入顺序。

           看例子:

{char a[256];

int b;char c;

scanf("%s",a);

scanf("%d%c",&b,&c);

}

这样写了之后,每次输入一个字符串和一个整数后,就结束了,坑爹,经过多方考证

知道了涉及到这个函数的理解问题,,,当你输入到屏幕中的时候,他是一个系统的标准输入文件流,你输入的东西都在这个流文件里面,这个时候,scanf()做的事情就是对应的读取过程了,

但是%c很特殊,他总是被忽略,导致很多时候没读入或者是非法操作,提供自己验证的两种方法:

1、scanf("%s",a);

scanf("%d\n%c",&b,&c);          //加入\n能够防止%c读入空格的字符

2、scanf("%s",a);

getchar();        //在此处加入getchar(),能够将上一个遗留的空格取得,再将后面的%c和%d交换,这样问题

scanf("%c%d",&c,&b);        //就避免了

 

所以在此为自己强行规定下,读取的时候,最好能够在scanf()之后用上getchar()。。而且对于需要多个对象一起读入的时候,一定要留意%c       (高手勿喷)

转载于:https://www.cnblogs.com/wency/archive/2012/04/28/2475663.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值