分享

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

 nice舵主 2014-06-04

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一次读入,然后用一个分隔函数分隔,似乎不好。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多