控制台在同一行更新进度

C#代码如下

复制代码
using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Console.Write("Progress: ");

        // 循环迭代,模拟进度显示
        for (int i = 0; i <= 100; i++)
        {
            // 更新控制台中的进度显示
            Console.SetCursorPosition(10, Console.CursorTop);
            Console.Write($"{i}%");

            // 模拟一些工作(例如处理任务、计算等待)
            Thread.Sleep(100);

            // 清除进度数字之后的部分(可选)
            ClearRemainingConsoleLine();
        }

        // 所有进度完成后显示结束消息
        Console.WriteLine("\nDone!");
    }

    // 清除进度数字之后的方法
    static void ClearRemainingConsoleLine()
    {
        // 记录当前光标位置
        int currentLineCursor = Console.CursorTop;

        // 将光标移动到进度数字后,清除剩余部分
        Console.SetCursorPosition(10, Console.CursorTop);
        Console.Write(new string(' ', Console.WindowWidth - 10));

        // 将光标还原到之前的位置
        Console.SetCursorPosition(10, currentLineCursor);
    }
}
View Code
复制代码

 

在C++控制台中,你可以使用 `std::cout` 来实现在同一行上更新进度。类似于C语言的方法,你同样可以使用转义字符 `\r` 控制光标位置。以下是一个简单的例子:

复制代码
#include <iostream>
#include <thread>  // 包含头文件以使用sleep_for函数

int main() {
    for (int progress = 0; progress <= 100; progress++) {
        std::cout << "\rProgress: " << progress << "%";
        std::cout.flush();  // 刷新输出缓冲区
        std::this_thread::sleep_for(std::chrono::milliseconds(100));  // 休眠100毫秒,模拟进度变化
    }

    std::cout << std::endl;  // 完成时换行
    return 0;
}
View Code
复制代码

在这个例子中,`\r` 会将光标移动到行首,然后使用 `std::cout` 输出新的进度信息,并使用 `std::cout.flush()` 刷新输出缓冲区,确保信息立即显示。 `std::this_thread::sleep_for` 函数用于休眠,你可以根据需要调整参数。

posted @   阿坦  阅读(345)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示