关于输入输出的整理

cin、cout使用方便,但是除了遇到字符串、较复杂的读入,且输入量不大的情况时,不考虑使用。在添加语句“ios::sync_with_stdio(false);”之后,效率可以与scanf、printf相近,但是VC编译对此是不敏感的(只能平时练习时使用,大部分比赛和常见OJ是不支持的......)。同时务必注意printf和cout不要混用。

scanf()是在C语言中最常用的输入函数,它需要我们严格按照要求进行输入,当它遇到空格、回车、或者Tab键时,都会自动停止输入,剩下的内容逗留在缓冲区中

gets()主要用来接收一整行字符串,可以接收空格,遇到’\n’时结束,**但不接收’\n’,不把 ‘\n’留存输入缓冲区**;把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个’\0’。程序运行到gets(),会将缓冲区继续读入直到遇到'\n'。主要用于处理读入一整行的情况。要使用的话,**务必考虑缓冲区遗留的换行符的影响**,使用getchar处理掉之前遗留下来的换行符

getchar()主要用来接收单个字符,不管是空格或者回车都可以接收.可以用作特别字符作为结束的时候进行判断以及输入外挂。

务必注意!!!scanf中读入double类型,使用的标识符是lf;printf中double和float的标识符都是f,没有lf。有的系统中printf也允许lf,但是标准是不允许的...在poj上遇到过好几次这样的错误了。而且printf输出指定精度的浮点数时,会进行四舍五入的舍位。为了避免这个问题,可以在读入浮点数时就扩位,或者输出时扩位处理成想要的格式再输出。比如要求输出为小数点之后2位,就可以将浮点数*100,舍去之后的小数位再除100,就实现了向下舍位。见例题POJ1064

但是有些情况下就需要再对读入进行一些优化才能避免TLE......比如洛谷P1983,是一道拓扑排序的题,但是输入量较大,TLE也是刚刚超出1s,考虑快读。读入字符串再进行处理。

posted @ 2020-10-07 19:06  太山多桢  阅读(140)  评论(0)    收藏  举报