c ++程序打印到哪里?

时间:2018-01-03 20:37:54

标签: c++

您可以使用fout指定在某些程序中计算出来的值的文件,但是当您使用时,例如printf?这不是在命令行上打印的东西(但这就是cout的作用吗?)在我看来,printf会打印到文件,但是打印到哪个文件?

请注意我已经看过帖子'printf' vs. 'cout' in C++,但答案似乎都假设知道什么是printf从根本上这是我无法理解的。

2 个答案:

答案 0 :(得分:1)

对于某些输出操作,您必须指定要将输出发送到的文件/流。 fprintf函数(来自C库)就是一个例子。它的第一个参数是FILE*类型,它必须引用您打开的文件 - 或者一个默认的预打开文件。特定于C ++的std::cout << "hello\n"是另一个例子; std::cout是预先打开的输出流。

对于其他操作,例如printf,输出所在的位置是隐式的。 printf(args...)被定义为等同于fprintf(stdout, args...)

C stdout(类型为FILE*)和C ++ std::cout(来自std::basic_ostream的类型)都指标准输出。这是在程序开始执行时由环境为您打开的输出流。

发送到标准输出的输出的实际位置取决于操作系统以及调用程序的方式。通常,默认情况下它将打印到当前终端窗口。 (在较旧的系统上,它可能是纯文本终端屏幕或硬拷贝终端。)大多数操作系统提供了重定向标准输出的方法,例如:

your_program > output.txt

your_program | another_program

your_program > /dev/null

这些(尝试)将输出发送到指定文件,发送到另一个程序的输入,或丢弃发送给它的所有输入的设备。

答案 1 :(得分:0)

  

但是当你刚才使用时,例如printf?

printf输出到标准输出流。

  

这不会在命令行上打印

可能而且通常是的。 shell控制标准输出流到的位置。除非输出被重定向,否则标准输出将显示在命令行上。

  

(但这是cout的作用吗?)

是。 std::cout也会打印到标准输出流。

要了解输入/输出流是什么,您可以从Single UNIX Specification中了解它。 UNIX不是C ++标准的一部分,但C ++标准使用相同的标准流概念。

  

流与外部文件相关联(可能是物理设备)...

     

...

     

在程序启动时,预定义了三个流,无需明确打开:标准输入(用于读取传统输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)......

但不一定是物理设备,也不一定是存储在磁盘上的东西。