scanf和printf的另类用法

时间:2023-01-07 19:58:09
scanf不仅仅可以输入内容还可以清楚内存区的缓存问题 

int n,m;
char c;
scanf( “%d %d”,&n, &m );
scanf("%c",&c);
当输入 12 13 回车
c 把回车取走了 但是我们本意不是这样的 这就隐身出来缓存问题
因为scanf 不能带走回车 回车会在输入缓存中 c 在缓存中想读取一个字符 刚好就把回车读取了

怎样避免这些呢
可以这样scanf(" %c",&c);在%c前面加上空格 作用就是丢弃不可显示的字符
或者加入getchar()读取回车

当想清理缓存中的内容的时候可以使用scanf函数

scanf("%*[^\n]");
scanf("%*c");

测试代码如下

int main( void )
{
int n;
int m;
char test;
scanf("%d%d",&n,&m);
scanf("%*[^\n]");
scanf("%*c");
scanf("%c",&test);
scanf("%*[^\n]");
scanf("%*c");
printf("n=%d m=%d test=%c\n",n,m,test);
printf("------------------------\n");
char ab;
printf("1234\n");
scanf("%c",&ab);
printf("%c\n",ab);
return 0;
}


printf函数
char ab;
printf(“123\n”);
scanf("%c",&ab);

因为printf()会都走\n 所以程序会等待用户输入ab的值

printf函数的在此理解
printf函数遇到什么情况的时候回会输出内容
1 遇到\n 如printf("\n"); 会把缓存的内容输出来
2 当缓存区满的时候
3 当刷新缓存区的时候如 fflush(stdout)
4 当程序结束的时候
5 遇到输入内容的时候

测试代码
int main( void )
{

/* printf("123");
sleep(10);
*/

/*
printf("123");
fflush(stdout);
sleep(10);
*/

/*
printf("123");
getchar();
*/

return 0;
}