人们实际上还在使用cin和cout吗?

5

这完全是一个主观问题,更多的是闲聊。我正在参加一些C++测试,它们到处都是cin和cout。
人们实际上还在使用这些吗?我的意思是,我从未在实际公共应用程序中见过这样的东西。

我在测试中回答的最后一个问题是:

int c1;
cout << "Enter numbers: " << flush;
for(int n = 0; cin >> c1; ++n){
   cout << c1 << endl;
}
When does this end.. 

正确答案是“当用户按下ctrl+Z时”。我得在哪里按ctrl+Z?我猜想是在终端上。但老实说,我好久没见过终端了。而且我肯定不会尝试为其编写任何程序。

像这样的问题,在我们生活中还有意义吗?


8
你是一名程序员,已经很久没有使用命令行了吗? - tddmonkey
3
“When a user hits Ctrl+Z” 这个问题是特定于 Windows 控制台输入的。如果将答案改为 “当标准输入流到达文件结尾或遇到错误时”,那么这就是一个完全合理的问题。 - j_random_hacker
6
啊!也许这就是为什么人们无法通过我的面试问题:“把这个单词倒过来打印出来。”他们根本不知道如何打印!请注意,翻译的内容与原文意思相同,更通俗易懂,没有其他附加信息。 - Steve Hanov
1
我相信在Linux控制台上是CTRL+D。 - Dave Van den Eynde
5
那个循环太糟糕了!变量 n 完全没用。由于那个 for 循环只使用了它的结束条件,所以应该改成 while 循环。请代我批评你的老师。 - 3Doubloons
显示剩余5条评论
13个回答

22

终端广泛使用且将继续使用。原因在于,当娴熟运用时,它们比任何GUI更加强大。


2
这是一个泛化的观点,带有一点挑衅的意味;-) 显然,在某些情况下,图形用户界面更为合适-例如在图形设计工作中。但是,在某些情况下,几秒钟内键入的精心编写的Shell命令组合可以替代数十次鼠标点击和拖动。 - Joonas Pulakka
我上钩了。 :) 至于那个......在 GUI 中编写良好的菜单和快捷键可以完全消除点击...... 在大多数应用程序中,按下 ctrl+s 保存。 在 VS 中按下 f7 可以保存并编译所有内容。 在任何终端中都可以用一次按键来完成这个操作。 - baash05
我猜你可以创建一个shell别名(例如'a+enter'),让它做这件事,以及其他任何你想要的事情。那么如何(从其他地方复制)创建一个列表,列出Java代码导入的所有唯一包名称?"grep '^import ' *.java | sed -e's/.*import //' | -e's/;.$//' | sort -u >list ;-) - Joonas Pulakka

12

不,这些问题并不是非常相关的,但是是的,人们经常使用std :: cin和std :: cout。 即使设计图形界面的人也可能使用cout进行调试!


做得好。我使用TRACE,因为它在发布版本中没有被编译。但是了解其他人使用它的原因也是很有好处的。 - baash05
具有日志宏的实现被包装在调试if-defs中,避免它们被编译到发布版本中。并且可以用于多种目的,例如通过网络记录日志,记录到文件,记录到输出窗口,图形控制台等等。 - Stowelly

9

是的,只要控制台应用程序存在,cout和cin就会存在。


6

那么你想说你是一名程序员,从未使用或编写控制台应用程序?


自从大学以来,我很少用命令行窗口。虽然我主要活动在PDA领域,但是我甚至都不记得上一次在Windows中打开控制台了,除非有必要做一些严肃的事情。 - baash05
1
Windows和Linux提供截然不同的控制台设施。如果您使用Linux作为桌面操作系统,您更有可能发现控制台的用途,因此更有可能使用cin/cout/cerr。 - Brent Bradburn
1
更有可能在Linux中回答错误的问题,因为Ctrl + Z在那里不起作用。 - baash05

6

当然它是相关的。

许多自动化和管理脚本在各种服务器上都依赖于文本输出/输入。特别是在*nix系统中,而在Windows系统中,随着Powershell的出现和其精美的对象支持,这种情况并不像以前那么常见。

然后有些人(我承认我们这样的人越来越少了)几乎生活在终端里。我大约70-80%的工作时间都使用终端。我只是觉得它比大多数相关GUI应用程序更自然、更快速和更强大。


4

是的,您可能需要处理或转换输入文本文件。这会非常方便。


非常好的回答。我可能不会使用cin来做那件事,但是这是一个绝佳的答案。顺便说一下,CFile :: read || fread(FILEPTR,...)将是我的首选,但这只是因为我的经验。 C ++太棒了。 - baash05

3

在我看来,编写一份复杂的软件,一个好的方法是将GUI与其他部分分离,即通常情况下,其他部分必须能够在没有GUI的情况下工作

在这种情况下,使用cin/cout来管理I/O可能很方便。


太好了。那么,在没有 cmd 窗口和文件系统的掌上设备上,cout 会去哪里?在没有键盘和屏幕的蓝牙设备上,cin 又从哪里来? - baash05
我应该补充一下,我投了你的赞。你给出了一个很好的使用示例。虽然我自己可能用不上,但这确实是一个很好的用法。 :) - baash05
我从未接触过Palm,但我敢打赌它一定有一个文件系统,所以你可以将cin/cout重定向到文件中。而如果你的设备没有文件系统、键盘、显示器等等,也许你可以在内存中创建一个虚拟文件系统。什么?连内存都没有吗?这种情况下,你唯一的选择就是尝试在Ebay上转售你的设备...;-) - Pietro M
一般来说,流很有用,因为它们提供了一个标准接口,独立于您可能使用的输入/输出设备。您可以在运行时从控制台切换到文件系统或其他任何设备。 - Pietro M
实际上,过去手掌设备依赖于数据库系统。即使应用程序也只是名称空间(类似于)数据库中的记录。我在简化它... 我同意混合MVC模式,这绝对是一个值得追求的最佳实践。 - baash05

2

这些东西还有人真的在用吗?我从来没有在实际的公共应用中看到过。

什么是公共应用?你认为在任何*nix上使用的命令行工具是什么?是的,我们也使用它们,用于我们的SDK(至少是cout和cerr)。当输入复杂时,cin通常不是最好的选择--您需要编写一种词法分析器和解析器。


2

如果你的职业生涯中只编写GUI或Web应用程序,那么你可能不需要cin和cout。但如果你编写嵌入式应用程序,你的想法就会改变。你只需使用一组不同的库来编写控制台应用程序、基于文本的应用程序、GUI应用程序和Web应用程序。


2

我更愿意使用wcin和wcout,至少你可以获得Unicode字符集。


据我所知,这是一个非可移植的 Windows C++ 概念。其他系统(和语言/库)只需定义 stdin/stdout 接受字节,并应适当编码(通常为 ASCII 或 UTF-8)。 - Javier
1
不符合 ISO/IEC 14882:2003 第27.3节规定。 - Dave Van den Eynde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接