由网友 真相重于对错 提供的答案:
一般用这些的学生居多刷题用,工程上哪有时间scanf cin,cout,printf啊,真正的项目输入输出一般是用在调试或者测试等情况下,而且动则几十上百条,甚至上千上万条屏幕也显示不下。所以我反正用日志文件。真正给最终用户的肯定是图形方式。
由网友 小姚飞刀10717926 提供的答案:
本人是一个套着c++皮的c程序员,本人喜欢c++的面向对象,不喜欢c++标准库的东西,什么vector,list等,所以cin cout,不如scanf香的,它快啊。我们项目中进行比如向量运算时,直接在c++中写汇编,simd指令不香吗?c++标准库就是浪费CPU的效率,什么智能指针,什么模板,简直编译起来慢,运行起来更加慢,所以linus喷c++是有道理的。但是本人喜欢c++的class,里面的public,protected,和private,这样的权限蛮香的。c++标准库和那啥boost库,我们组我是强烈不用的
由网友 编码之道 提供的答案:
作为一位主要使用C/C++做开发的老码农,我可以很肯定的回答这当然是一种不正确的做法,并不是这两种方案熟好熟坏,而是取决于程序的设计方法,下面详细说说原因。
首先需要理清cin、cout、fstream与scanf、printf、FILE*之间的关系。前者用来在C++进行流相关的操作,其中fstream是一个文件流,当然还有其它类型的流,而cin和cout是两个对象,用来进行输入输出操作。后者主要是C语言中的概念,其中scanf和printf是输入输出函数,而FILE是一个结构体。虽然后者也能在C++中使用,毕竟C++将C语言当作一个完全支持的子集,但是从程序设计的角度来讲却有着巨大的差别。
C++是一种支持面向对象编程的语言,如果以面向对象作为程序设计的基本方法,那么使用类和对象等面向对象编程的技术才是正道,而流就是C++对文件操作的一种具体实现,当然应该使用cin、cout、fstream等进行文件操作。
当然,C++也支持面向过程的开发方法,而且和C语言完美兼容,如果为了兼容C程序,或者就是将C++当作C语言使用,那么使用scanf和printf等函数操作,也是一种可选方案,而在这种方案中则要尽量避免使用面向对象的东西。
所以从理论上来说,具体使用那种方案,取决于你的程序设计选择什么样的方法论,如果是面向对象就是用流操作;相反,如果为了兼容C程序而使用面向过程设计,那么就使用基本的函数操作。
总之,只要是语言本身支持的功能,如何使用都是可行的,但是要想使软件的设计方案更完美,就需要遵循一定的规则,而这并没有一个统一的标准,具体选择哪种方案取决于实际应用,但是选择统一的设计方法会给软件开发带来诸多好处。
由网友 勇往直前的龙凤呈祥 提供的答案:
1.推荐尽量不用C艹。
2.流操作比格式化安全。
3.不用纠结这个细节,C艹的难点不是选cin还是scanf,能掌握,习惯,跟团队合拍更重要。
4.继续推荐不要用C艹,如果你还在纠结cin与scanf,那C艹真不适合你。
由网友 Mason2098 提供的答案:
是的,这种说法我听过,并且我也比较赞同。我个人使用C++来说,的确倾向于使用scanf、printf和FILE *来进行文件和控制台输入输出,而不是cin、cout和fstream。
主要有以下几个原因:
第一,cin、cout和fstream实际上是基于stdio.h实现的封装,使用scanf、printf和FILE *可以直接操作底层,有一定的性能优势。尤其是对于大批量数据的读写,这一点会更加明显。
第二,cin、cout和fstream提供的接口虽然更加面向对象和易于使用,但是灵活性略差一些。有些低级操作使用scanf、printf和FILE *会更为方便,比如指定字段宽度、格式化输出等。
第三,cin、cout和fstream使用起来简单,但是一旦出错难以调试。它们把所有错误都封装起来,不利于我们分析根源。而scanf、printf和FILE *的错误消息会更加直接和详细,方便我们修复bug。
最后,出于性能和可移植性考虑,许多C++程序仍然保留了对C语言的向后兼容,继续使用像scanf和printf这样的函数。这也是推荐使用这些函数的一个原因。
所以,总的来说,在C++编程中使用scanf、printf和FILE *来代替cin、cout和fstream,这一说法是正确的,特别是对于一些高性能要求或者需要底层控制的应用程序来说更为合适。不过,对于一般的应用,cin、cout和fstream也没有什么不妥,更加简便易用也是它们的优点。
由网友 每日打工八小时 提供的答案:
看了很多人的回答,都只回答出了毛皮。
首先是效率,每一个流算符(《》)都相当于调用一次函数,效率高不高不用多说了。
其次,多线程。流的方式需要特殊的设计才能适用于多线程,否则同一行的输出都弄不清楚是不是来源于同一行代码。一般采用"析构执行",就是说cout在第一次调用流算符函数时返回一个对象,之后的流算符函数都是这个对象的,它返回自己的引用。每次调用它都把要输出的内容保存到内存中。当语句完成时此对象析构,在析构函数里输出内存保存的内容。输入不可能多线程同时请求输入,所以cin不做讨论。
但析构执行有一个问题,谁先析构,是你要io的变量先析构(要io的对象也是一个临时变量),还是临时的流对象先析构。这个不同的编译器可能有不同的实现,要是变量先于流对象析构,那流对象在析构时操作变量就会异常。这个问题当然可以避免,就是标准库要设计好。
最后还有一个怎么也避免不了的问题,流对象执行io你怎么知道成功还是没成功?printf等函数可以通过返回值判断。流对象无法判断。
综上所述,请避免使用流方式进行输入输出。
由网友 睿智的挨踢工程师 提供的答案:
这种说法是有些片面的。在说明原因之前,需要了解一些基础的知识。
C++中,cin、cout、fstream等是C++标准库的流输入输出,而scanf、printf、FILE *则是C语言中的标准输入输出。它们的区别在于:
- scanf/printf使用的是格式化的字符串,使用时需要注意字符串的长度以及数据类型。
- cin/cout是以面向对象的方式来使用的,操作简单,但效率相对较低。
- fstream是C++标准库提供的文件读写流,使用方法类似于cin/cout,但是效率比cin/cout更高。
说明完了区别后,需要注意的是,在C++中,scanf/printf不是标准的C++语法,但是仍然可以使用。同时,scanf/printf在处理字符串类型数据时容易出现缓冲区溢出等安全问题,所以,如果有需要使用scanf/printf,一定要额外注意数据的安全。
所以说,关于cin、cout、fstream和scanf、printf、FILE *的选择,要根据具体的场景来决定使用哪种方法。如果是普通的数据读写,可以考虑使用cin/cout;如果是需要读写大量的数据,可以考虑使用fstream;如果是需要快速输入输出,可以考虑使用scanf/printf,但需要注意安全问题。总的来说,不存在所谓的避免使用cin、cout、fstream,应该根据具体情况进行选择。
简单地说,cin、cout、fstream和scanf、printf、FILE *都是可用的,不存在哪个更好或更坏,只存在适用于什么情况。因此,在编程时应该根据具体需求,合理选择输入输出方法。
部分文章源于互联网收集,不代表默子网络立场,版权归原作者所有,如若转载,请注明出处:https://www.html369.cn/33793.html