首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么赵老师说要摒弃cin、cout、fstream;使用scanf、printf、FILE *该如何解决

2012-06-07 
为什么赵老师说要摒弃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++沉思录》会给楼主解惑。
[解决办法]
探讨

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一

标准输入IO的缓冲区刷新问题,不妨统计下论坛一个月有多少人问“为什么第……

[解决办法]
各有千秋
cin、cout可以自由的进行重定向,在不修改代码的情况下,将原来要显示在屏幕的东西改成打印。

但是在多线程系统中 cout << a << b;会被中断,如果两个线程同时输出,会出现顺序错乱的情况,这时就不如


printf("%d%d", a, b);

[解决办法]

探讨
引用:

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一

标准输入IO的缓冲区刷新问题,不妨统计下……

[解决办法]
因为赵老湿只会C不会C++
[解决办法]
探讨

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一

标准输入IO的缓冲区刷新问题,不妨统计下论坛一个月有多少人问“为什么第……

[解决办法]
探讨

引用:
引用:

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一

标准输入……

[解决办法]
谨记:过早的优化是万恶之源。
话说回来,不用iostream一般往往不是性能问题。
比如,iostream/fstream没有printf函数族在运行时确定输出格式的功能,所以功能上取代不了。
再如,一些时候iostream会使目标程序体积明显增大,这至少对嵌入式平台来说是需要考虑的因素。

[解决办法]
探讨

引用:

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一

标准输入IO的缓冲区刷新问题,不妨统……

[解决办法]
探讨
引用:

引用:

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认的C语言缺陷之一

标准输入……

[解决办法]
探讨

引用:
引用:

引用:

当一个库/函数/语法特性会让绝大多数初学者犯错或产生低效用法的时候,或者默认特性糟糕必须手动避开默认行为,就不能怪初学者水平差,完全是设计有问题

iostream我就不在吐槽了,说些其他的

C的switch的fall through,不手动加break就不会跳出而继续执行下一个case,公认……

[解决办法]
我认为有fall through能力的switch不是多余的,就像goto不是多余的一样。
[解决办法]
好多大神呀,可是偶还是喜欢用CIN,

[解决办法]
探讨
我认为有fall through能力的switch不是多余的,就像goto不是多余的一样。

[解决办法]
C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要用什么、你不该用什么之类的

不同的人写出来的C++根本就是不同的语言,光着一点就够罪孽深重了
[解决办法]
所谓以其人之道还治其人之身,赵老师这招够阴的——你不让我用stdio,我偏说摒弃iostream;你让我用常量,我便说用宏……

有这种争论的本身就印证了C++教材说法的荒谬
[解决办法]
>>fallthrough 是公认的C语言缺陷之一
>>C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评
>>C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要用什么、你不该用什么之类的

怎么看怎么都觉得自相矛盾。或许你想表达另外的意思。


C++的批评的声音远比C,但绝大部分观点都不是来自作者本人。作者想要什么,他就设计什么,他知道自己在做什么,倒是很多使用者不明白作者的本意。如果说C++罪孽深重,倒不如说C++亮点太多了都亮爆了,以致有的人被亮瞎了。

>>不同的人写出来的C++根本就是不同的语言。
不能扼杀别人的创意。糟糕的C代码也皆皆比是,就算他们风格相同,我想也不会有人耐心看完。
另外由于C++亮爆了,因此C++需要各种手法,这是C++程序员的交流方法,就如同模式对于OO来说很重要一样。C++的方式和C的方式早就形成大的断层,这里没有优劣之分,选哪个就用哪个。不能强求把别人讲汉语用英语的语序说出来。
[解决办法]
printf还有scanf虽然效率高些,但是有时对于short一类的数据会很麻烦,我用的时候都是把使用临时的int变量(据说新的标准解决了这个问题),实际上c还有一个缺陷就是float经常就被转double了,很多浮点数转换的误差都是因为这个
[解决办法]

探讨

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要用什么、你不该用什么之类的
……

[解决办法]
探讨

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要用什么、你不该用什么之类的
……

[解决办法]
请问楼主给孩子请保姆你请老老实实知根知底做事靠谱的家人还是请灵活多变时尚靓丽做事不靠谱的小保姆?

谁用c++实现一下和下面C程序功能类似的代码?
C/C++ code
#include <stdio.h>char s[]="123 ab 4";char *p;int v,n,k;void main() {    p=s;    while (1) {        k=sscanf(p,"%d%n",&v,&n);        printf("k,v,n=%d,%d,%d\n",k,v,n);        if (1==k) {            p+=n;        } else if (0==k) {            p++;        } else {//EOF==k            break;        }    }    printf("End.\n");}//k,v,n=1,123,3//k,v,n=0,123,3//k,v,n=0,123,3//k,v,n=0,123,3//k,v,n=1,4,2//k,v,n=-1,4,2//End.
[解决办法]
探讨

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要用什么、你不该用什么之类的
……

[解决办法]
探讨

请问楼主给孩子请保姆你请老老实实知根知底做事靠谱的家人还是请灵活多变时尚靓丽做事不靠谱的小保姆?

谁用c++实现一下和下面C程序功能类似的代码?
C/C++ code
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) {
k=s……

[解决办法]
探讨
>>fallthrough 是公认的C语言缺陷之一
>>C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评
>>C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要用什么、你不该用什么之类的

怎么看怎么都觉得自相矛盾。或许你想表达另外的意思。
C++的批评的声音远比C,但绝大部分观点都不是来自作者本人。作者想要什么,他就设计什么,他知道自己在做……

[解决办法]
顶C++,感觉cout什么格式的都能输出啊,只要适当的输出函数,感觉还没有什么东西是不能用cout输出到屏幕上的。cin嘛,的确很不好用,但不是有很多库中预定义好的输入函数么。
[解决办法]
探讨
引用:

请问楼主给孩子请保姆你请老老实实知根知底做事靠谱的家人还是请灵活多变时尚靓丽做事不靠谱的小保姆?

谁用c++实现一下和下面C程序功能类似的代码?
C/C++ code
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) ……

[解决办法]
istringstream

------解决方案--------------------


探讨
引用:

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C++大牛们的心态体现的非常明显,经常有许多武断性的结论——你要……

[解决办法]
一边说人家武断,一边自己又在武断地下结论,哥不是真心的想咬文嚼字啊,既然你想下结论就让人信服可以不?关于fallthrough,我就会用,因为比if挨个判断的效率快多了,而且可读性更好,另外,这部分代码是处在关键的dispatch位置。

>>而C++很多观点只能看到“为了和C不一样,所以……”,再看C++x0引入nullptr这货是干吗的。

void foo(int);
void foo(void*);
void foo2(void*);

const char c = 0;
foo(c);
foo2(c);

foo(nullptr);
foo2(nullptr);
---
没有重载哪来这些问题,Cer是不是要吐槽C++的重载了?会不会还要吐槽nullptr和bool的转换呢?

不得不质疑那群喜欢批判C++的Cer到底了解C++多少
[解决办法]
去看看imperfect c++是怎么说c++的缺点的吧。
这本书也是BS等一些C++大牛所推荐的。所以C++那些大牛心胸没有那么狭隘。
至于这个什么摒弃cin,cout等等 如果你是学c++那么这个观点就是扯淡。
[解决办法]
探讨

去看看imperfect c++是怎么说c++的缺点的吧。
这本书也是BS等一些C++大牛所推荐的。所以C++那些大牛心胸没有那么狭隘。
至于这个什么摒弃cin,cout等等 如果你是学c++那么这个观点就是扯淡。

[解决办法]
有人说过
“,sstream是C,sscanf是C++。”
吗?

我说
“摒弃cin、cout、iostream;使用scanf、printf、FILE *”
意思并不是说摒弃C++;使用C。
意思是前者太通用,太抽象,太不可控,具体干什么经常让人搞不懂;后者具体问题具体分析,行为很确定可控,通常不会让人搞不懂。
[解决办法]
探讨
引用:

请问楼主给孩子请保姆你请老老实实知根知底做事靠谱的家人还是请灵活多变时尚靓丽做事不靠谱的小保姆?

谁用c++实现一下和下面C程序功能类似的代码?
C/C++ code
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) ……

[解决办法]
所以吐槽任何一门语言都没什么意义。因为在吐槽前得先了解这门语言在什么背景下产生 语言的作者当时是要解决什么样的问题。
[解决办法]
探讨
因为赵老湿只会C不会C++

[解决办法]
C++只是一种面向对象的编程思想。
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。

[解决办法]
探讨

引用:
因为赵老湿只会C不会C++

只是因为我还没碰到1000行C语言代码不能解决的问题而已。

记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

[解决办法]
很明显,看到有几个楼层的一个比较好的观点,

那就是, Cer们,普遍具有开展自我批评,有则改之无则加勉, 
而 Cpper们, 像维护 宗教/X教一样,容不得说Cpp的负面,使劲去美化那些负面的东西,



[解决办法]
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

[解决办法]
探讨

其实我觉着这句话很对:实际上许多所谓的Cer,用的其实就是C++(他们的程序用C89甚至C99根本编译不过),比如几乎100%的VC上的C用户。
上次我在C编译器下写个很简单的东西,本来如果在VC下大约1个小时就可以搞定,结果硬是搞了大半天,平时用的都是C++的语法,我没系统地学过C语言,C的语法有些不同也不知道,例如没有bool型,局部变量必须在函数里先全部声明出来再使用等等,我没有吐谁的槽……

[解决办法]
探讨

引用:
引用:

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C++大牛们的心态体现的非常明显……



[解决办法]
探讨

很明显,看到有几个楼层的一个比较好的观点,

那就是, Cer们,普遍具有开展自我批评,有则改之无则加勉,
而 Cpper们, 像维护 宗教/X教一样,容不得说Cpp的负面,使劲去美化那些负面的东西,

[解决办法]
探讨
引用:

引用:
引用:

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈的争论

C++教材对C+……

[解决办法]
探讨

引用:
引用:

引用:
引用:

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书。

而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激……

[解决办法]
探讨

其实我觉着这句话很对:实际上许多所谓的Cer,用的其实就是C++(他们的程序用C89甚至C99根本编译不过),比如几乎100%的VC上的C用户。
上次我在C编译器下写个很简单的东西,本来如果在VC下大约1个小时就可以搞定,结果硬是搞了大半天,平时用的都是C++的语法,我没系统地学过C语言,C的语法有些不同也不知道,例如没有bool型,局部变量必须在函数里先全部声明出来再使用等等,我没有吐谁的槽……

[解决办法]
探讨
引用:
引用:

引用:
引用:

C++那帮大牛和C大牛们最大的差距其实就是心态,C大牛是非常勇于批评自己的,C缺陷和陷阱、C专家编程都是罕见的以批判一种技术为主的书
而C++明明是一种缺陷重重的语言,却极少见C++阵营的权威人士出来批评,批评他的往往都是另一阵营的,如linus,最后往往演变为两派激烈……

[解决办法]
楼主的帖子亮了。

如此多的大牛们的讨论。

mark 学习一下。

其实赵老师蛮好的,多热心指点我们这些初学者的。。。

至于喜好嘛,每个人都不同 各有所好呀。。。。
[解决办法]
探讨

引用:

一边说人家武断,一边自己又在武断地下结论,哥不是真心的想咬文嚼字啊,既然你想下结论就让人信服可以不?关于fallthrough,我就会用,因为比if挨个判断的效率快多了,而且可读性更好,另外,这部分代码是处在关键的dispatch位置。

>>而C++很多观点只能看到“为了和C不一样,所以……”,再看C++x0引入nullptr这货是干吗的。

void……

[解决办法]
我喜欢用printf,因为在多线程环境下,它是一个原子操作,也就是说输出过程中不会被打断,用cout就输出一统乱码了
[解决办法]
探讨

引用:

引用:

一边说人家武断,一边自己又在武断地下结论,哥不是真心的想咬文嚼字啊,既然你想下结论就让人信服可以不?关于fallthrough,我就会用,因为比if挨个判断的效率快多了,而且可读性更好,另外,这部分代码是处在关键的dispatch位置。

>>而C++很多观点只能看到“为了和C不一样,所以……”,再看C++x0引入nullp……

热点排行