添加cout语句会更正输出吗?

时间:2012-11-30 23:58:38

标签: c++ cout

我现在多次遇到这个问题,并且想知道是否有人可以解释为什么会发生这种情况?在这里,我正在编写一个程序,将不同排序操作的运行时输出到表中。当我添加“为什么这会使它工作”cout语句时,它的工作原理。没有它,它就没有了,压痕就会被抛弃。

 cout << "Size Selection    Insert    Bubble     Shell     Merge  Heapsort Quicksort       STL" << endl;

  for(int i = 50; i <= 6400; i *= 2) { // Prints table
    cout << "Why does this make it work" << endl;
    for(int j = 0; j < i; j++) { // Creates random vector
      v.push_back(rand());
    }

    vector<int>& arr = v;

    // arr = &v;
    cout << setw(4) << i;

    start = clock();
    SelectionSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    InsertionSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    BubbleSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    ShellSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    MergeSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    HeapSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    QuickSort(arr);
    cout << setw(10) << clock() - start;

    start = clock();
    sort(arr.begin(), arr.end());
    cout << setw(10) << clock() - start;
  }

2 个答案:

答案 0 :(得分:2)

据我所知,“为什么这会使它工作”行是唯一一个包含endl的行。因此,如果没有endl,当文本到达窗口的末尾时,控制台会包裹该行(它不会真正改变行,它只会包装当前的行)。

看起来像新行的内容很可能包含“上一行”的一些遗留物,因此文本看起来并不像预期的那样。

使用endl,您将切换到下一行,文本真正从头开始。

答案 1 :(得分:0)

您的示例没有给出您想要的答案的原因是,std::ostream不会将每个输出发送到输出,而是将缓存数据并仅在其内部缓存已满时将其发送到输出或者当您致电flush时,std::endl也会为您致电flush!并导致您看到您的输出。尝试用cout.flush()替换它,你会发现每件事情都会好起来的!