网站这么建设,泰州网站关键词优化软件咨询,wordpress按修改时间排序,网商之窗麻将开挂前言
目录
前言 需要先了解 1.\r和\n 2.缓冲区 一.理解字符的含义#xff1a; 学习c语言时#xff0c;我们可以粗略把字符分为可显字符和控制字符. 在按回车换到下一行开始的操作时#xff0c;实际上是进行了两个操作#xff1a;1.让光标跳到下一行#xff08;只…前言
目录
前言 需要先了解 1.\r和\n 2.缓冲区 一.理解字符的含义 学习c语言时我们可以粗略把字符分为可显字符和控制字符. 在按回车换到下一行开始的操作时实际上是进行了两个操作1.让光标跳到下一行只是垂直向下这一步的操作称为换行.2.让光标跳到最开始的位置此操作称为回车. 即\r:回车 \n换行。 而在c语言环境下把\n简化 其代表回车加换行。 测试\n,\r:
\n,\r都存在既有回车又有换行所以其linux的命令行在我们执行程序下面。 只有\n
们在上面说了这是我们在这个语言环境下我们将其简化此时的\n就表示回车加换行。 \r \n都没有
linux命令就直接跟在文本行后面。 只有\r
只有回车的效果光标本来在文本行最后一个字符旁回车后光标来到了文本行开始最终导致文本被覆盖。 二缓冲区的概念
#includestdio.h
#includeunistd.hint main()
{printf(hello world);sleep(3);
}运行上面代码会发现结果没有立马打印出来这是因为数据在sleep期间被暂时保存起来。
但是如果加上\n数据就会显示出来。————缓冲区有自己的行缓冲刷新策略。 三小程序
1.倒计时小程序 1 #includestdio.h2 #includeunistd.h3 4 int main()5 {6 int i0;7 for(i9;i0;i--)8 {9 printf(%d\r,i);10 11 sleep(1);12 }13 return 0;14 }我们利用\r覆盖的特性实现如上代码但是结果倒计时却不显示原因是数据存放在缓冲区里缓冲区没有被刷新。我们将代码修改如下
1 #includestdio.h2 #includeunistd.h3 4 int main()5 {6 int i0;7 for(i9;i0;i--)8 {9 printf(%d\r,i);10 fflush(stdout); 11 sleep(1);12 }13 return 0;15 }以上代码我们会发现如果时间变成两位数将只能覆盖一位数因此修改为
1 #includestdio.h2 #includeunistd.h3 4 int main()5 {6 int i0;7 for(i9;i0;i--)8 {9 printf(%-2d\r,i);10 fflush(stdout); 11 sleep(1);12 }13 return 0;15 }
~ 2.进度条
进度条的预期样式[#########################################] [%100] [/] 第一个括号是进度条 第二个括号是进度百分比 第三个是旋转图标 用于判断是否卡住。
编写
proc.h编写进度条的头文件proc.c编写进度条的函数main.c测试进度条 proc.h 1 #pragma once 2 3 #include stdio.h4 5 void process(); ~ main.c 1 #include proc.h2 3 int main()4 {5 process();6 return 0; 7 }proc.c 1 #includeproc.h2 #includeunistd.h3 #includestring.h4 5 // |/-\旋转标志6 void process()7 {8 const char* lable |/-\\; //特殊字符\需要用\\9 10 //为什们要定义101个字符11 //就是因为我们的进度条有100个12 //但是字符的结尾要用\0表示所以我们要有101个字符13 char bar[101];14 //先将进度条设置为\0然后在依次增加#。15 memset(bar,\0,sizeof(bar));16 int i0;17 while(i100)18 {19 printf([%-100s] [%d%%] [%c]\r,bar,i,lable[i%4]); 20 fflush(stdout);21 bar[i]#;22 usleep(100000);23 }24 printf(\n);25 26 }