簡體   English   中英

添加cout語句會更正輸出嗎?

[英]Adding a cout statement corrects output?

我現在多次遇到這個問題,並想知道是否有人可以解釋為什么會發生這種情況? 在這里,我正在編寫一個程序,將不同排序操作的運行時輸出到表中。 當我添加“為什么這會使它工作”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;
  }

據我所知,“為什么這使它工作”行是唯一一個包含endl的行。 因此,如果沒有endl,當文本到達窗口的末尾時,控制台會包裹該行(它不會真正改變行,它只會包裝當前的行)。

看起來像新行的很可能包含“前一行”的一些遺留物,因此文本看起來並不像預期的那樣。

使用endl,您將切換到下一行,文本真正從頭開始。

您的示例沒有給出您想要的答案的原因是, std::ostream不會將每個輸出發送到輸出,而是會緩存數據並僅在其內部緩存已滿或調用時將其發送到輸出flush ,也是std::endl會為你調用flush 並導致您看到您的輸出。 嘗試用cout.flush()替換它,你會發現每件事都會好起來的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM