在写一个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; } |