2014-10-04 63 views
4

我正在寻找一个在C++中区分cerrcout的例子吗?什么时候使用cerr和当cout在C++中?

我什么时候需要使用cerr

+0

你见过http://stackoverflow.com/questions/5058716/shall-i-use-cerr吗? – matsjoyce 2014-10-04 09:30:44

+2

该程序的预期输出应该去std :: cout。意想不到的警告或错误信息会破坏程序的输出,应该转到std :: cerr。您通常不希望将程序产生的输出与信息报告混合在一起。 – Galik 2014-10-04 09:39:32

+0

可能的重复[cout,cerr,cock中iostream头部的clog有什么区别?何时使用哪一个?](https://stackoverflow.com/questions/16772842/what-is-the-difference-between-cout-cerr-clog-of-iostream-header-in-c-when) – roottraveller 2017-09-12 06:39:23

回答

1

std::cout:正常输出(控制台输出)

std::cerr:错误输出(控制台错误)

谷歌是你的朋友:)

6

很多操作系统让你从/重定向输入和输出文件。当最终用户将您的输出重定向到文件时,最终用户看不到任何您写入到cout;如果你希望你的输出被最终用户看到,你需要一个单独的流,你可以为它们打印消息。

假设您正在编写一个从标准输入逐行读取的程序,并将这些行按排序顺序写入标准输出。比方说,你的程序需要一个命令行参数来说明输出是否需要按升序或降序排序。如果最终用户为该参数传递了无效值,则需要将消息"Invalid flag"输出到控制台。打印到cout将是不正确的,因为cout可能被重定向到一个文件,所以用户不会看到它。在这种情况下的正确解决方案是将此消息写入cerr

6

很多时候你的程序的用户只关心结果,因为这些被打印到stdout,举例来说,如果你使用UNIX命令的猫,如:

$ cat file.txt 

你希望文件。 txt内容出现在stdout上。然而,如果在猫的执行过程中发生任何事情(严格地说从理论上讲,我从来没有发生过任何事情),你会期望它会变得更加直接,因此,作为一个用户,你仍然能够分开这两个,例如:

$ cat file.txt 1>result.txt 2>stderr.txt 

假设我想收集的多个文件的内容,我下面

$ cat *.java 1>all_files_conent.java 2>errors.txt 

在任何情况下的文件是无法访问(例如,因为权限),ERRORS.TXT将会有适当的信息:

cat: Controller.java: Permission denied 

但all_files_content.java的内容尽可能正确。因此,如果消息是程序的实际产品,则应使用cout,如果它只是状态消息,则使用cerr。当然,如果控制台发生的只是副产品,那么所有这些都不重要。但是,您可能仍希望允许用户将两者分开,如上例所示。

相关问题