没有使用终端获得确切的输出形式

Not getting exact form of output using terminal

本文关键字:输出 终端      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
    int t;
    int n;
    cin>>t;
    while(t--) {
        cin>>n;
        cout<<n<<endl;
    }
}

输入测试文件:

2
1
2

现在,当我复制此输入并将其粘贴到终端时,它给出的输出如下:

2
1
21
2
Process returned 0 (0x0)   execution time : 3.485 s
Press ENTER to continue.

但是我希望输出采用以下格式,如 IDE 中给出的格式,如代码块。

2
1
1
2
2

将输入复制到终端时是否可以以这种格式显示输出?

您的代码为我生成了您想要的正确输入。您的问题很可能是您将输入粘贴到终端中,因此所有内容都会立即出现。相反,如果您使用键盘逐手动输入输入,它应该会产生您想要的视图。

虽然我不知道你为什么要这样做,因为你的终端"输出"的某些行不是输出,而是由于竞争条件而输入的输入。

2 // Input (stdin)
1 // Input (stdin)
1 // Output (stdout)
2 // Input (stdin)
2 // Output (stdout)

编辑:回应对此答案的评论

我希望在粘贴输入并按回车键后,标准输出有 2 1 1 2 2

为此,您需要了解stdinstdout之间的区别,同时在运行应用程序时两者都打印到终端,它们是单独的流。 stdin通常从键盘读取,这与通常打印到终端输出窗口的stdout不同。

下面的简单程序将输入和输出分成 2 个独立的for循环,以便您可以看到差异。

#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

在此"输出"中,前 3 个数字来自stdin,而后 5 个数字来自stdout并产生您需要的正确输出。

$ ./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)

输入反馈和程序输出之间存在争用条件。

阻止终端在复制和粘贴输入时显示您键入的所有内容是不可能的。

如果您延迟程序的输出,直到您确定没有剩余的输入,您总是可以获得可靠的结果。但是你不能反过来,除非你自己在输入下一行之前耐心地等待上一行输出。 但是,使用大多数终端的复制和粘贴功能,您将无法实现这一目标。