什么时候使用printf / scanf vs cout / cin?

时间:2011-10-15 19:22:26

标签: c++ c printf iostream scanf

我正在使用MinGW的g ++测试我在网上发现的一些片段。这是C ++编译器...为什么它正确地编译C ....为什么人们交织在一起C和C ++。

具体问题是:是O.K.使用C和C ++并在g ++下编译。如果答案是肯定的,这将使我的生活变得轻松,因为我不必修改代码。

奇怪的是......让一些C ++工作,特别是在将字符串传递给ifstream构造函数时,它需要一个C类型的字符串......

我的猜测是,因为C ++依赖于C结构,有时将O.K写在一起。

但是,作为一种风格问题,您应该选择cout / cinprintf / scanf

4 个答案:

答案 0 :(得分:5)

有一些奇怪的地方需要char*。您可以使用.c_str()的{​​{1}}方法来弥补差距。

在大多数情况下,C ++的C子集是兼容的。在大多数情况下,它究竟是如何不兼容的并不重要:

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

如果您正在C ++编译器下编译C代码片段,请务必将其更改为使用包含中的“c”lib格式...例如std::string而不是#include <cstdio>

Is it bad practice to use a C header instead of its C++ equivalent in C++ (e.g. stdio.h instead of cstdio)?

关于Bjarne自己为什么要避免使用scanf的一个相当合理的论点,请查看本文的开头:

http://www2.research.att.com/~bs/new_learning.pdf

使用iostreams代替printf也有很多好处:

'printf' vs. 'cout' in C++

答案 1 :(得分:3)

C ++语言从C继承了它的大部分核心功能。那是因为C ++是从C派生而来的.C ++标准包含了大部分C标准。因此,您可以使用C ++编译器使用C构造,习语和范例编写代码。这样做通常被称为使用C ++“作为更好的C。”

上述的长短是肯定的,你可以在C ++代码中使用printf。标准明确允许这样做。

然而,这样做往往会忽略定义C ++的许多功能。我会把这个对话留给另一个问题但是足以说很多人会告诉你“不要那样做”或“那不是C ++”。这就说明了为什么你可能不想在C ++程序中使用printf或者你想要的原因。但请放心,这在技术上是允许的。

答案 2 :(得分:2)

  

是O.K.使用C和C ++并在g ++下编译。

是的,可以将这两种语言混合使用。这对于以C开头的代码很常见,但随后又添加了越来越多的C ++特性(显然有人在此过程中改变了编译器)。

通常,C代码将使用C ++编译器进行编译和运行。有许多可能的例外情况,例如使用classvirtual等关键字来表示C代码中的事物名称,或C的宽松投射规则。

您经常会听到人们说“他们的语言非常不同”。这是因为您提出的任何编程问题可能会有不同的答案,具体取决于您尝试使用的语言。但是,还有很多相似之处和向后兼容性方面。

答案 3 :(得分:0)

如果您使用C ++,那么使用C ++。 (cincout
为什么fstream也会让c字符串困惑。