一、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)