之前做电子通讯录出现过一个问题,有“1,2,3”几个数字对应的功能供用户选择,但只要每次用户输入英文字母或者其他不适数字类的东西,通讯录就会崩溃,后来发现这个缓冲区有关。
scanf和printf都是行缓冲。若缓冲区内始终有不确定的内容,很容易对程序的稳定性造成影响。
所以后来写了个清除缓冲区的函数
void clear_cache()//跳过输入行的剩余部分,清空缓冲区
{
while(getchar() != '\n') //getchar()不断读取缓冲区的内容,知道行结束
{
continue;
}
}
函数很简单但是作用很大,每次在scanf等输入之前加上清空缓冲区函数可以确保每次缓冲区都很干净,不会读入乱七八糟的东西,用户之前输入的东西不会影响到下一次的输入。
另外
scanf
的返回值是它能够成功读入的变量的个数,这里可以通过检测的返回值,来确定用户成功输入了几个满足要求的值。
printf
的返回值时候它打印了多少个字符。
关于缓冲区的问题以后还会有更深入的学习,所以以后还会有更新~