[英]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.