我在Windows 10 x86 64位计算机上运行Netbeans 8.1,我将项目的Run>控制台类型设置为标准输出,因为内部或外部终端都没有为我工作,而我已经制作了任何其他来源 - - 标准输出有哪些。无论如何,这是我试图运行的代码:
int main(void){
float original_amount, amount_with_tax;
printf("Enter an amount: ");
scanf("%f", &original_amount);
amount_with_tax = original_amount * 1.05f;
printf("With tax added: $%.2f\n", amount_with_tax);
exit(EXIT_SUCCESS);
}
这是输出:
3
输入金额:已含税:$ 3.15
RUN SUCCESSFUL(总时间:4s)
正如您所看到的,扫描功能是在程序打印“输入金额:”之前读取数字。此外,在我注释掉scanf函数后,它按预期打印了两个printf语句。我一直在努力解决这个问题,感谢任何帮助,谢谢!
答案 0 :(得分:0)
ISO / IEC 9899:201x :
文件
...当一个流被行缓冲时,当一个换行符时,字符意图作为一个块传输到主机环境或从主机环境传输 遇到了字符。 ...
您的标准输出流似乎是行缓冲的,这通常是这样。
尝试
printf("Enter an amount: ");fflush(stdout);
- BLUEPIXY那很有效!这是否必要,因为我使用标准输出作为我的运行控制台?
不,您的程序打开的其他流甚至可能完全缓冲。
如果是这样,我应该把它放在任何程序的开头 将使用访问缓冲区的函数吗?
将fflush(stdout)
放在程序的开头不会,因为它只输出stdout
缓冲区中已有的内容。但是你可以在那里使用setbuf(stdout, NULL)
。