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个选择:
显式刷新
fflush
每次写入从缓冲区获利后仍然明确强制执行所需的行为/显示.
fflush( stdout );
Run Code Online (Sandbox Code Playgroud)缓冲区只有缓冲区
当你知道只打印完整的线条就足够了
setlinebuf(stdout);
Run Code Online (Sandbox Code Playgroud)禁用缓冲区
setbuf(stdout, NULL);
Run Code Online (Sandbox Code Playgroud)通过它提供的选项菜单在控制台中禁用缓冲
这是您的选项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)
好吧,所以最后我使用类似于@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)
我是从这里得到的.