網站首頁 編程語言 正文
\r和\n
在程序里面,\r
和\n
分別代表什么意思?
\r:表示“回車”,即回到當前行的起始位置
\n:表示換行,即列不變,另其一個新行
行緩沖區(qū)
什么是行緩沖區(qū)?先別慌,來看代碼一執(zhí)行會是什么樣的狀態(tài)。
//代碼一,mytest.c文件 # include <stdio.h> int main(void) { printf("hello linux"); sleep(1); return 0; }
現象:光標休息一秒后,打印出hello linux。
那這個現象是不是說明了,sleep先執(zhí)行,printf函數后執(zhí)行呢?
并不是的,在執(zhí)行sleep函數之前printf函數已經被執(zhí)行了,只是數據暫時存放到了行緩沖區(qū)內,沒有立即刷新出來。行緩存區(qū)只有在輸入和輸出中遇到換行符時,緩沖區(qū)才立即刷新,然后把數據傳給磁盤,執(zhí)行真正的I/O操作。
有了一個認知后
//代碼二,mytest.c文件 # include <stdio.h> int main(void) { printf("hello linux\r");//添加了回車 sleep(1); return 0; }
因為內容被放到了行緩沖區(qū)內,刷新緩沖區(qū)的時候,hello linux
本來是刷新出來了的,但是由于有一個\r
回車符,然后又回到了行首的位置,導致數據被覆蓋了。所以休眠了一秒之后,什么也沒有被顯示到屏幕上。
進度條
根據上面的行緩存區(qū)的知識
總結出進度條的一個制作方法:
假設以#
作為進度條的一個顯示,第一次輸出#
,立即刷新出來;利用\r
回車的知識,第二次讓它回到改行行首的位置,輸出##
,立即刷新出來;同樣的第三次回到該行行首,然后輸出###
……
想法很美好,理論可以成功,開始實踐……
# include <stdio.h> # include <string.h> //別忘記包含memset函數的頭文件 int main(void) { char buffer[102]; //開辟一個能容納102個字符的數組 memset(buffer, 0, sizeof(buffer));//將字符數組的每一個字節(jié)都初始化為0 int i = 0; while(i <= 100) { printf("[%-100s][%d%%]\r", buffer, i); //控制輸出的格式 fflush(stdout); //立即刷新標準輸出流 buffer[i++] = '#'; //把i下標的空間初始化為#之后,++i usleep(50000); //因為usleep是毫秒為單位,進度條時間可以自己控制 } printf("\n");//最后的時候換個行更加美觀 return 0; }
實踐成功,達到了我預期的效果,perfect!
原文鏈接:https://blog.csdn.net/qq_56870066/article/details/124256389
相關推薦
- 2022-11-29 C#交換兩個變量值的幾種方法總結_C#教程
- 2022-10-12 no-bundle?構建原理淺析_web2.0
- 2023-07-06 mac快速配置iterm2
- 2023-02-12 Golang如何構造最佳隨機密碼詳解_Golang
- 2022-11-11 Android學習之菜單的使用方法_Android
- 2022-11-03 tomcat?集群監(jiān)控與彈性伸縮詳解_Tomcat
- 2023-01-28 python基礎之reverse和reversed函數的介紹及使用_python
- 2022-05-08 ASP.NET?MVC視圖尋址_實用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支