C++ 使用终端无法获得精确的输出形式
现在,当我复制这个输入并将其粘贴到终端时,它会给出如下输出:C++ 使用终端无法获得精确的输出形式,c++,terminal,output,C++,Terminal,Output,现在,当我复制这个输入并将其粘贴到终端时,它会给出如下输出: 2 1 2 但我希望输出的格式如下,就像IDE中的代码块一样 2 1 21 2 Process returned 0 (0x0) execution time : 3.485 s Press ENTER to continue. 将输入复制到终端时,是否可以以这种格式显示输出?您的输入反馈和程序输出之间存在竞争条件 在复制和粘贴输入时,无法以便携方式阻止终端显示您键入的所有内容 如果您将程序的输出延迟到确定没有输入时,您总
2
1
2
但我希望输出的格式如下,就像IDE中的代码块一样
2
1
21
2
Process returned 0 (0x0) execution time : 3.485 s
Press ENTER to continue.
将输入复制到终端时,是否可以以这种格式显示输出?您的输入反馈和程序输出之间存在竞争条件 在复制和粘贴输入时,无法以便携方式阻止终端显示您键入的所有内容
如果您将程序的输出延迟到确定没有输入时,您总能得到可靠的结果。但是,除非你自己在键入下一行之前耐心地等待前一行的输出,否则你不能用另一种方式来处理。但大多数终端的复制粘贴功能都无法实现这一点。您的代码为我生成了您想要的正确输入。您的问题很可能是您将输入粘贴到终端中,因此它会立即显示出来。相反,如果您用键盘手动输入,一个接一个,它应该会生成您想要的视图 虽然我不知道为什么你会想这样做,因为你的终端“输出”的一些行不是输出,而是由于竞争条件的输入
2
1
1
2
2
编辑:回应对此答案的评论 在粘贴输入并按enter键后,我希望标准输出具有2 1 2 要做到这一点,您需要了解
stdin
和stdout
之间的区别,而当您运行应用程序时,两者都打印到终端,它们是独立的流stdin
通常从键盘读取,这与通常打印到终端输出窗口的stdout
不同
下面的简单程序将输入和输出分成两个独立的for
循环,以便您可以看到差异
2 // Input (stdin)
1 // Input (stdin)
1 // Output (stdout)
2 // Input (stdin)
2 // Output (stdout)
在该“输出”中,前3个数字来自stdin
,而后5个数字来自stdout
,并产生您所需的正确输出
$ ./a.out
2
1
2
2
1
1
2
2
您发布的代码在终端中为我生成正确的输出…对我来说,它不起作用。您可以看到我的输出。1紧跟在2之后,看起来像21,这意味着不可能实现这样的输出。所以,唯一的方法就是一个接一个地写输入。我知道如果我一个接一个地粘贴输出,它会产生正确的输出。但这不是我想要的。在竞争编码过程中,我确实需要一次性粘贴整个输入。@shivammitra这个问题非常不清楚,而且越来越不清楚。您希望
stdout
具有2 1 2
还是希望输出显示在stdin
和stdout
上,如我在回答中所示?我认为您需要仔细阅读stdin
和stdout
之间的差异,以及它们在终端中的表示方式。即使粘贴了输入,终端上的输入/输出也应该看起来像2 1 2,其中一些是输入,一些是输出。在windows中复制和粘贴代码块确实提供了我想要的输出。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int t, n, i;
vector<int> numbers;
cin >> t;
// Input
for (i = 0; i < t; ++i) {
cin >> n;
numbers.push_back(n);
}
// Output
cout << t << endl;
for (vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << "\n" << *it << endl;
}
}
$ ./a.out
2
1
2
2
1
1
2
2
$ ./a.out
2 // Input (stdin)
1 // Input (stdin)
2 // Input (stdin)
2 // Output (stdout)
1 // Output (stdout)
1 // Output (stdout)
2 // Output (stdout)
2 // Output (stdout)