在控制台程序中,希望將數組輸出在固定位置,後續數據變化時更新顯示,而非不斷追加輸出導致畫面滾動。
#include <iostream>
#include <vector>
#include <windows.h> // Windows 平台 Sleep
#include <cstdlib> // system()
void printArray(const std::vector<int>& arr) {
system("cls"); // 清屏,Windows 下有效
// Linux/Mac 使用 system("clear");
std::cout << "當前數組狀態:" << std::endl;
for (int val : arr) {
std::cout << val << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> data = {1, 2, 3, 4, 5};
for (int round = 0; round < 10; ++round) {
// 模擬數據變化
for (int& v : data) v += 1;
printArray(data);
Sleep(500); // 暫停 500ms 觀察效果
}
return 0;
}
void clearScreen() {
#ifdef _WIN32
system("cls");
#else
system("clear");
#endif
}
使用光標控制序列實現原地更新,效果更流暢:
void printArrayAnsi(const std::vector<int>& arr) {
// 移動光標到行首,清除從光標到屏幕末尾
std::cout << "\033[H\033[J";
std::cout << "當前數組狀態:" << std::endl;
for (int val : arr) std::cout << val << " ";
std::cout << std::flush; // 確保立即輸出
}
\033[H:光標移至左上角 (0,0)\033[J:清除從光標到屏幕末尾內容system("cls") 會啟動新進程,頻繁調用有性能開銷且畫面會閃爍。簡單需求用 system("cls") 即可;追求流暢體驗請使用 ANSI 轉義序列或專業終端庫。