首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 控制台動態刷新輸出:使用 system("cls") 實現固定位置更新數組顯示

     編輯:程式設計綜合問答

需求分析

在控制台程序中,希望將數組輸出在固定位置,後續數據變化時更新顯示,而非不斷追加輸出導致畫面滾動。

解決方案:清屏重繪

#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
}

進階方案:ANSI 轉義序列(無閃爍、跨平台)

使用光標控制序列實現原地更新,效果更流暢:

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:清除從光標到屏幕末尾內容
  • 現代終端(Windows 10+ CMD/PowerShell、Linux、Mac)均支援

注意事項

  • system("cls") 會啟動新進程,頻繁調用有性能開銷且畫面會閃爍。
  • ANSI 方案輕量、無閃爍,推薦用於實時動畫、進度條、遊戲循環。
  • 若需複雜界面,建議使用 ncurses (C/C++)、PDCurses 或圖形庫。

總結

簡單需求用 system("cls") 即可;追求流暢體驗請使用 ANSI 轉義序列或專業終端庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved