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

来源:互联网 发布:怀特塞德在cba的数据 编辑:程序博客网 时间:2024/06/06 01:51

一、C语言中回车与换行

/n 换行将光标移动到下一行第一格相当于平时用的回车 /r 回车 将光标移动到当前行第一格

背景: 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 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");

}

二、

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

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

0 0