在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个选项:
- 
显式刷新 在每次从缓冲区写入盈利之后,仍然执行所需的行为/显示。 fflush( stdout );
- 
只有缓冲区只有缓冲行 当你知道只打印完整的行就足够了 setlinebuf(stdout);
- 
禁用缓冲区 setbuf(stdout, NULL);
- 
通过它提供的选项菜单来禁用控制台中的缓冲 
例子:
这是你的代码与选项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; } 
我从这里得到它