一、回车和换行的区别
/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");
}