关于在c中从输入语句的心得和差错控制

c语言用得最多两类输入语句,一个scanf(),和getchar(),getch(),gets().而且对于文件读取也是这样,只是函数前加了f。

不管什么函数,它们的一个原理不变,就是都是先从键盘里将所以字符读入到缓存,在从缓存 里读给变量,如果没读掉的就保存在缓存里由下次读取,就像个队列。
这就有了错误的可能,有时用户在键盘输入是不安规则来。

一是如果你要的是输入数字,他打入的是别的字符,这个就要你自己用if来判断变量里的数据了,不符合要求的都认为是错误。

二是,缓存里由多余的东西,标准c语言没有清除缓存的函数。怎么办。
1.对于sanf()它是有默认的分隔符号的,如果你不自己定义。其中的回车表示一次输入结束,这时就把字符包括回车给了缓存,缓存就给变量。但如果还有变量需要输入,会再次等待,这时就是新的一次输入。如果输入多了,就是缓存里有了空余,其实就是把缓存里回车之前的清除掉。
while ( (ch=getchar()) != '/n' && ch != EOF );
就可以解决了。因为scanf里不管怎么样都不会把回车给变量,所以不管正确错误,都会有回车在里面。
2.对于getchar()就也差不多和上面的scanf()解决办法,但是就是getchar()他是逐个字符读入,也就说,回车是很可能被读入变量的,而平时我们很多就是用ch=getchar();是否是'/n'来结束循环。所以来控制是否缓存有多余,就要加一个判断,是否是正常的。
if(ch!='/n') while ( (ch=getchar()) != '/n' && ch != EOF );
其实getchar一般是不要差错控制,这个是针对不仅仅是通过'/n'来判断结束的时候。比如你要的格式只能是全数字,和几个特殊字母,那么在输入中出现非法字符都得结束循序时,上述那个就很有用。
3.其他的都可以类推。

另外scanf有个很多注意点
1.scanf你定义读入数据的宽度就不能在用分隔符
2.scanf是以空格来分隔字符串的,如果自定义分隔是没有用的

对于csv文件,我到网上看来一下,一般是用gets一次读入,然后用一个分隔函数分隔,似乎不好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值