资讯动态

第一个示例

发布时间:2026/10/23 4:54:13 来源:尧图企业网站定制
一、行缓冲区int main() { printf(hello bite!\n); sleep(3); return 0; }情况一带 \n代码printf(hello world\r\n); sleep(2);结果因为遇到了 \n触发了行缓冲刷新内容立刻打印到显示器上。int main() { printf(hello bite!); sleep(3); return 0; }情况二不带 \n代码printf(hello world); sleep(2);现象程序执行了 printf但屏幕上**看不到**任何输出。原因1. printf 已经执行完毕但数据没有直接写到显示器而是被**缓存在了内存空间**中C标准库的缓冲区。2. sleep 期间数据一直待在内存缓冲区里所以我们看不到。3. 程序结束时系统会自动刷新缓冲区此时 hello world 才会被打印出来。* 终端现象终端输出 hello world[whbbite-alicloud lesson9]$说明程序结束时自动刷新了缓冲区因为没有 \n所以输出内容和命令提示符挨在了一起没有换行。int main() { printf(hello bite!); fflush(stdout); sleep(3); return 0; }情况三结果hello bite!立刻显示在屏幕上然后程序睡 3 秒最后结束。因为没有\n所以输出内容不会换行命令提示符可能会和hello bite!挨在一起原因printf(hello bite!); 先把内容写进 stdout 这个标准输出流的缓冲区。因为没有 \n不会触发行缓冲自动刷新但是紧接着调用了 fflush(stdout);。fflush(stdout) 的作用就是强制刷新 stdout 这个流把缓冲区里的数据立刻写到底层设备屏幕。所以 sleep(3) 之前屏幕上就能看到 hello bite!。程序结束时虽然还会自动刷新一次但此时缓冲区已经空了不会再多打印补充背景知识回车与换行\r回车回到行首\n换行移动到下一行。常组合使用\r\n即回车换行。刷新方式\r\n 或 \n 会触发**行刷新**按行为单位刷新。核心结论printf 默认写到 stdout。stdout 是标准输出流不是缓冲区本身它内部有缓冲区。\n 可以触发行缓冲自动刷新。fflush(stdout) 可以手动强制刷新不依赖 \n也不依赖程序结束。3.倒计时程序#includestdio.h #includeunistd.h int main() { int cnt 10; while(cnt 0) { printf(%-2d\r,cnt); // %-2d : - 左对齐(默认右对齐)2 最小宽度2d 十进制整数 // \r : 回车光标移到本行开头 // 不加2 : 无最小宽度宽度随数字变10→10(2字符)9→9(1字符) 13 // 9 只写入1个字符只覆盖第1格第2格旧的0残留 // 屏幕依次 10→90→80→...→00 // 加2 : 最小宽度29→9 (补空格)每次写满2格完整覆盖上一轮 // 屏幕依次 10→9 →8 →...→0 (干净) // 终端 : 显示的全是字符10 在屏幕上就是 10但它原本是整数 fflush(stdout); sleep(1); cnt--; } return 0; }进度条未完成

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑