Eclipse下printf和scanf的运行顺序问题

在写一个C语言时,运行时发现scanf比printf先执行了,在网上找了一下资料,原来是输出缓冲区的问题。解决方法有两个,第一,设置缓冲区为空,即没有缓冲区;第二,每执行printf之后,强制缓冲区。具体方法如下:

  1. 在printf之前添加: c#setvbuf(stdout,NULL,_IONBF, 0);设置缓冲区为空。
  2. 在每句printf之后添加:c#fflush(stdout);

测试代码如下:

方法一:

#include
int main(void) {
    setvbuf(stdout,NULL,_IONBF,0);
    char aa[20];
    printf ("input:");
    scanf("%s", aa);
    printf ("output:%s", aa);
    return 0;
}

方法二:

#include <stdio.h>
int main(void) {
    char aa[20];
    printf ("input:");
    fflush(stdout);
    scanf("%s", aa);
    printf ("output:%s", aa);
    fflush(stdout);
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注