人们实际上还在使用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个回答

2

我曾经参与过许多专业应用程序的开发,但我们没有在任何一个应用中使用cin或cout进行日志记录/调试。为什么?因为无状态的*printf方法完全可以胜任。多年来,我学到的一件事情就是,在可维护性方面,无状态比有状态更加重要。


2
的确,iostreams提供的“facilities”状态非常糟糕,特别是无法以RAII方式保存/恢复所有状态。另一方面,当值的类型可能会发生变化(例如在模板中)并且您永远不会遇到像这样的问题时,它们非常有用:http://stackoverflow.com/questions/601180 - j_random_hacker

1
从语言角度来看,如果回答“这个程序什么时候结束”是“当收到EOF时”,那将更为可接受。仅仅因为在DOS中“Control-Z”是EOF,并不意味着Ctrl-Z就是正确的答案。
编辑 根据评论信息进行了编辑。

@Doug:不,回答“当标准输入流到达文件结尾”更为合适。文件结尾是一种语言概念。 - j_random_hacker
看着这个"for"循环,它会在"cin >> c1"的结果为false时结束。但是我从不在布尔条件中使用结合命令和查询的表达式。 - Daniel Daranas
好吧..如果我看到这段代码,我会想打那个写它的人..for循环是计数器,while循环是未定义的。并且同意关于EOF的问题。可悲的是这是多项选择题。 - baash05
1
在Linux系统中,如果我没记错的话,EOF是Ctrl+D。此外,如果您正在使用管道或重定向作为该小应用程序的输入,则当输入流关闭(没有更多内容可读取)时,它将结束。 - Joe Pineda
(最后一条注释适用于支持重定向的任何系统,包括大多数DOS版本) - Joe Pineda
显示剩余2条评论

0

我每天都使用std::cin、std::cout和std::cerr。系统编程缺乏GUI界面。


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