在scanf()问题之前的C/C++ printf()

qua*_*pka 28 c printf scanf output

我正在使用Eclipse来编写C/C++代码,而我正在努力解决可能非常简单的问题.在我下面的代码中,我使用printf()和之后scanf().Althougth printf是在scanf()输出不同之前编写的.我能在这里找到类似问题的东西.但我无法解决它.有任何想法吗?

码:

#include <stdio.h>

int main()
{
    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

Enter a number:1
1
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

1
Enter a number:1
Run Code Online (Sandbox Code Playgroud)

zsa*_*yer 36

您的输出正在缓冲.你有4个选择:

  1. 显式刷新

    fflush 每次写入从缓冲区获利后仍然明确强制执行所需的行为/显示.

    fflush( stdout );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 缓冲区只有缓冲区

    当你知道只打印完整的线条就足够了

    setlinebuf(stdout);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 禁用缓冲区

    setbuf(stdout, NULL);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 通过它提供的选项菜单在控制台中禁用缓冲


例子:

这是您的选项1的代码:

#include <stdio.h>
int main() {

    int myvariable;

    printf("Enter a number:");
    fflush( stdout );
    scanf("%d", &myvariable);
    printf("%d", myvariable);
    fflush( stdout );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是2:

#include <stdio.h>
int main() {

    int myvariable;

    setlinebuf(stdout);    

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和3:

#include <stdio.h>
int main() {

    int myvariable;

    setbuf(stdout, NULL);     

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


qua*_*pka 6

好吧,所以最后我使用类似于@zsawyer写的标签为3的选项.在我的代码中插入了这一行:

setvbuf(stdout, NULL, _IONBF, 0);
Run Code Online (Sandbox Code Playgroud)

作为main()的第一行:

#include <stdio.h>

int main()
{
    setvbuf(stdout, NULL, _IONBF, 0);

    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我是从这里得到的.