摘要:前言有时我们需要更新同一行输出信息,而不是输出新行,如进度显示。可使用的返回值得到已输出字符数。对于第种实现,输出的新字符数量必须不少于已输出的,以完全覆盖之前的输出。
前言
有时我们需要更新同一行输出信息,而不是输出新行,如进度显示。两种实现方法:
输出退格符,清除该行输入字符
输出回车符 ,然后覆盖已输出的字符
对于第1种实现,该行已输出多少字符,需要刚好输出相同数量的,以防止某些终端实现把上一行的回车也吃掉了。可使用printf()的返回值得到已输出字符数。
对于第2种实现,输出的新字符数量必须不少于已输出的,以完全覆盖之前的输出。
本人更倾向于第2种实现,只要保证每行输出的字符数量相同(通过printf()指定参数的输出字符数),实现更简洁、维护性更好。
本文分别给出C语言和Shell的实现例子。
C语言实现c#include#include int main(void) { int i; for (i = 0; i < 100; i++) { printf(" progress: %3d %%", i); fflush(stdout); sleep(1); } printf(" "); return 0; }
需要特别注意的是,终端设备是行缓冲设备,即除非输出换行符 或缓冲区已满,否则printf()不会有任何输出;所以这里需要使用fflush(stdout)清除标准输出缓冲区,以立即输出缓冲区内容。
Shell实现bash#!/bin/bash for i in {1..100} do printf " process %3d %%" $i sleep 1 done # print a new line echo
脚本中可使用printf命令行程序。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/7765.html
摘要:前言有时我们需要更新同一行输出信息,而不是输出新行,如进度显示。可使用的返回值得到已输出字符数。对于第种实现,输出的新字符数量必须不少于已输出的,以完全覆盖之前的输出。 前言 有时我们需要更新同一行输出信息,而不是输出新行,如进度显示。两种实现方法: 输出退格符,清除该行输入字符 输出回车符 ,然后覆盖已输出的字符 对于第1种实现,该行已输出多少字符,需要刚好输出相同数量的...
摘要:当一个应用启动时,会自动加载这些库,为应用提供了一个基础环境。也就是说,模板文件只能包含以这三种标签为顶层标签的片段。在中,我们需要判断当前的具体运行环境,以便执行相应的代码。 一、全栈开发平台 - 不仅仅是前端 Meteor和那些名声如雷贯耳的前端框架,比如Angular, React等都不一样,它是一个 采用单一开发语言的全栈开发的平台:开发者可以使用JavaScript同时 进...
摘要:后文所用的测试文件是一个阿里云导出的文件,,测试时文件已缓存显示的接近用去用看一下方法耗时较大,因为会对每一行都进行处理,但是实际上只有第一行有,所以浪费了。 工作中多多少少都会遇到UTF-8 BOM(后面直接叫BOM),有时第三方工具不支持就要自己去掉BOM,例如阿里云导出的SQL文件是有BOM的,但是Navicat不支持,这就要去掉BOM了。 后文所用的测试文件是一个阿里云导出的S...
摘要:后文所用的测试文件是一个阿里云导出的文件,,测试时文件已缓存显示的接近用去用看一下方法耗时较大,因为会对每一行都进行处理,但是实际上只有第一行有,所以浪费了。 工作中多多少少都会遇到UTF-8 BOM(后面直接叫BOM),有时第三方工具不支持就要自己去掉BOM,例如阿里云导出的SQL文件是有BOM的,但是Navicat不支持,这就要去掉BOM了。 后文所用的测试文件是一个阿里云导出的S...
阅读 1595·2023-04-25 14:33
阅读 3224·2021-11-22 15:22
阅读 2013·2021-09-30 09:48
阅读 2458·2021-09-14 18:01
阅读 1639·2021-09-07 09:59
阅读 1549·2019-08-30 15:55
阅读 2895·2019-08-30 15:53
阅读 1962·2019-08-30 15:44