在写一个C语言时,运行时发现scanf比printf先执行了,在网上找了一下资料,原来是输出缓冲区的问题。解决方法有两个,第一,设置缓冲区为空,即没有缓冲区;第二,每执行printf之后,强制缓冲区。具体方法如下:
-
在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);
设置缓冲区为空。 -
在每句printf之后添加:fflush(stdout);
测试代码如下:
方法一:
1
2
3
4
5
6
7
8
9
10
11
|
|
#include <stdio.h>
int main(void)
{
setvbuf(stdout,NULL,_IONBF,0);
char aa[20];
printf ("input:");
scanf("%s",
aa);
printf ("output:%s",
aa);
return 0;
}
|
方法二:
1
2
3
4
5
6
7
8
9
10
11
|
|
#include <stdio.h>
int main(void)
{
char aa[20];
printf ("input:");
fflush(stdout);
scanf("%s",
aa);
printf ("output:%s",
aa);
fflush(stdout);
return 0;
} |