为什么赵老师说要摒弃cin、cout、fstream;使用scanf、printf、FILE *该如何解决
为什么赵老师说要摒弃cin、cout、fstream;使用scanf、printf、FILE *??
之前也看到另外一位大神这样说过,说是他们公司禁用cin、cout、fstream,今天又在一个帖子里看到赵老师这样说,请问这是为什么啊?----话说我也觉得后者用起来比较方便,但又感觉不只是方便的原因.
------解决方案--------------------
这是胡说!初学者不要乱信。
------解决方案--------------------
这个要去问赵老师了。等赵老师的解答。
------解决方案--------------------
------解决方案--------------------
赵老师也是个初学者嘛。
------解决方案--------------------
iostream一类的东西用起来并不如C标准io直观,易用性上没优势
效率上100个人用iostream 99个人效率低下,恐怕只有1楼大神能用出更高的效率
要说优点就是类型安全性吧,主要在格式化io这里
------解决方案--------------------
scanf、printf、FILE *这几个比较基础通用
cin、cout、fstream也没有摒弃的必要
------解决方案--------------------
1,因为fd和FILE可以转来转去, cout/cin不行。
2,FILE可以使用格式化输入输出,cout/cin是调用重载函数,不灵活。
3,fstream的eof, bad, fail 定义混乱,并以这些标记作为判断标准直接终止用户的I/O调用。
C I/O不会以这些标志作为停止执行的标准,而是始终实际进行一次操作,有问题就返回错误并标记。
标记只是一个提示作用供用户ferror,feof查看,而不是用作阻止用户调用的用途。 这一点让C++ I/O经常恶心到我,真心恶心。
------解决方案--------------------
当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题
iostream我就不在吐槽了,说些其他的
C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一
标准输入IO的缓冲区刷新问题,不妨统计下论坛一个月有多少人问“为什么第二个scanf无效”、“为什么循环输入无效”之类的问题。
……
------解决方案--------------------
啥老师不知道 不过这种东西确实少用的好 流输入效率低下 远比C的接口效率要低得多...
------解决方案--------------------
喜欢用哪个就用哪个好了。在大多数情况下,这样的东西不是问题的重点。
------解决方案--------------------
童鞋,其实这问题,好比如C++和JAVA那个更好这样,但是上面那个问题,无非是从效率上区别
说实话,我之前也看过cout和printf的函数,用效率的话,毕竟还是printf比cout要快很多!
但这个讨论起来,我也只能说那么丁点而已....
------解决方案--------------------
如果真有水平分得这么清楚,我想用哪个都不会出错
------解决方案--------------------
去看exceptional c++吧。
------解决方案--------------------
c的fprintf,多么方便,
尤其是要格式化地打印 一堆数据,int,double,各种等等。。。以及日后更改格式。
打印的宽度,小数点数等, fprintf 比 c++的那些方便
------解决方案--------------------
试想,10000行数据。
每行包含10个以上的 int/double等数值,
第一行,样式A
第二行,样式B
第三行,样式C。
...
如此反复变换各种样式,(这些样式,宽度小数点位数左右对齐各不同)
选printf?还是cout?
------解决方案--------------------
赵老师说:不要迷信。。。。。。、老师、。。。。。。。,要迷信。。。。。。。。
------解决方案--------------------
可能赵老师认为C函数更直接些吧。
C++是想要做更高级的抽象。
具体的《C++程序设计语言》和《C++沉思录》会给楼主解惑。
------解决方案--------------------
------解决方案--------------------
各有千秋
cin、cout可以自由的进行重定向,在不修改代码的情况下,将原来要显示在屏幕的东西改成打印。
但是在多线程系统中 cout << a << b;会被中断,如果两个线程同时输出,会出现顺序错乱的情况,这时就不如
之前也看到另外一位大神这样说过,说是他们公司禁用cin、cout、fstream,今天又在一个帖子里看到赵老师这样说,请问这是为什么啊?----话说我也觉得后者用起来比较方便,但又感觉不只是方便的原因.
------解决方案--------------------
这是胡说!初学者不要乱信。
------解决方案--------------------
这个要去问赵老师了。等赵老师的解答。
------解决方案--------------------
------解决方案--------------------
赵老师也是个初学者嘛。
------解决方案--------------------
iostream一类的东西用起来并不如C标准io直观,易用性上没优势
效率上100个人用iostream 99个人效率低下,恐怕只有1楼大神能用出更高的效率
要说优点就是类型安全性吧,主要在格式化io这里
------解决方案--------------------
scanf、printf、FILE *这几个比较基础通用
cin、cout、fstream也没有摒弃的必要
------解决方案--------------------
1,因为fd和FILE可以转来转去, cout/cin不行。
2,FILE可以使用格式化输入输出,cout/cin是调用重载函数,不灵活。
3,fstream的eof, bad, fail 定义混乱,并以这些标记作为判断标准直接终止用户的I/O调用。
C I/O不会以这些标志作为停止执行的标准,而是始终实际进行一次操作,有问题就返回错误并标记。
标记只是一个提示作用供用户ferror,feof查看,而不是用作阻止用户调用的用途。 这一点让C++ I/O经常恶心到我,真心恶心。
------解决方案--------------------
当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题
iostream我就不在吐槽了,说些其他的
C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一
标准输入IO的缓冲区刷新问题,不妨统计下论坛一个月有多少人问“为什么第二个scanf无效”、“为什么循环输入无效”之类的问题。
……
------解决方案--------------------
啥老师不知道 不过这种东西确实少用的好 流输入效率低下 远比C的接口效率要低得多...
------解决方案--------------------
喜欢用哪个就用哪个好了。在大多数情况下,这样的东西不是问题的重点。
------解决方案--------------------
童鞋,其实这问题,好比如C++和JAVA那个更好这样,但是上面那个问题,无非是从效率上区别
说实话,我之前也看过cout和printf的函数,用效率的话,毕竟还是printf比cout要快很多!
但这个讨论起来,我也只能说那么丁点而已....
------解决方案--------------------
如果真有水平分得这么清楚,我想用哪个都不会出错
------解决方案--------------------
去看exceptional c++吧。
------解决方案--------------------
c的fprintf,多么方便,
尤其是要格式化地打印 一堆数据,int,double,各种等等。。。以及日后更改格式。
打印的宽度,小数点数等, fprintf 比 c++的那些方便
------解决方案--------------------
试想,10000行数据。
每行包含10个以上的 int/double等数值,
第一行,样式A
第二行,样式B
第三行,样式C。
...
如此反复变换各种样式,(这些样式,宽度小数点位数左右对齐各不同)
选printf?还是cout?
------解决方案--------------------
赵老师说:不要迷信。。。。。。、老师、。。。。。。。,要迷信。。。。。。。。
------解决方案--------------------
可能赵老师认为C函数更直接些吧。
C++是想要做更高级的抽象。
具体的《C++程序设计语言》和《C++沉思录》会给楼主解惑。
------解决方案--------------------
------解决方案--------------------
各有千秋
cin、cout可以自由的进行重定向,在不修改代码的情况下,将原来要显示在屏幕的东西改成打印。
但是在多线程系统中 cout << a << b;会被中断,如果两个线程同时输出,会出现顺序错乱的情况,这时就不如