C语言实现进度条[背景+源码]

来源:互联网 发布:软件专业有哪些课程 编辑:程序博客网 时间:2024/06/05 00:37

一、回车和换行的区别

/n 换行将光标移动到下一行第一格相当于平时用的回车 
/r
回车 将光标移动到当前行第一格
'/r'
是回车,'/n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。下面转一篇文章。


背景:在计算机还没有出现之前,有一种叫做电传打字机(TeletypeModel 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做回车,告诉打字机把打印头定位在左边界;另一个叫做换行,告诉打字机把纸向下移一行。


二、fflush

fflush()会强迫将缓冲区内的数据写回参数stream 指定的文件中. 如果参数stream为NULL,fflush()会将所有打开的文件数据更新.

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结   束)。 
 
  遇空格、回车跳格键。 
 
  遇宽度结束。 
 
  遇非法输入。 
键盘缓冲区就可能有残余信息问题。

scanf()函数应该只是扫描stdin流,这个残存信息是在stdin 
解决就要在scanf()函数之后加个fflush(stdin)


三、带百分比和状态动画的进度条源码

void proc()

{

       charbuf[103];

       memset(buf,' ', sizeof(buf));

       buf[0]= '[';

       buf[101]= ']';

       buf[102]= '\0';

       inti = 0;

       charindex[6] = "-\\|/\0";

       while(i <= 100)

       {

              buf[i]= '=';

              printf("%s[%d%%][%c]\r", buf, i, index[i % 4]);

              fflush(stdout);//刷新缓冲区

              Sleep(200);

              i++;

       }

 

       printf("\n");

}


0 0
原创粉丝点击