您的位置:首页 > 其它

scanf和printf的另类用法

2015-06-16 00:50 295 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: