在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; }
我从这里得到它