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

我正在使用Eclipse在C / C ++中进行编码,而且我正在努力处理可能非常简单的事情。 在我的代码下面我使用printf()scanf() 。 在scanf()之前写入的是printf ,输出不同。 我能够在这里find类似的问题。 但我无法解决它。 有任何想法吗?

码:

 #include <stdio.h> int main() { int myvariable; printf("Enter a number:"); scanf("%d", &myvariable); printf("%d", myvariable); return 0; } 

预期产出:

 Enter a number:1 1 

相反,我得到:

 1 Enter a number:1 

您的输出正在被缓冲。 你有4个选项:

  1. 显式刷新

    在每次从缓冲区写入盈利之后,仍然执行所需的行为/显示。

     fflush( stdout ); 
  2. 只有缓冲区只有缓冲行

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

     setlinebuf(stdout); 
  3. 禁用缓冲区

     setbuf(stdout, NULL); 
  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; } 

这里是2:

 #include <stdio.h> int main() { int myvariable; setlinebuf(stdout); printf("Enter a number:"); scanf("%d", &myvariable); printf("%d", myvariable); return 0; } 

和3:

 #include <stdio.h> int main() { int myvariable; setbuf(stdout, NULL); printf("Enter a number:"); scanf("%d", &myvariable); printf("%d", myvariable); return 0; } 

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

 setvbuf(stdout, NULL, _IONBF, 0); 

作为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; } 

我从这里得到它