【问题标题】:Netbeans 8.1 scanf() function does not work properlyNetbeans 8.1 scanf() 函数无法正常工作
【发布时间】:2016-09-19 19:45:21
【问题描述】:

我在 Windows 10 x86 64 位计算机上运行 Netbeans 8.1,我将项目的 Run>Console Type 设置为 Standard Output,因为无论是内部终端还是外部终端都不适用于我制作的任何其他来源 - - 标准输出有。无论如何,这是我试图运行的代码:

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

运行成功(总时间:4s)

如您所见,扫描功能在程序甚至打印“输入金额:”之前读取数字。此外,在我注释掉 scanf 函数后,它按预期打印了两个 printf 语句。我一直在努力解决这个问题,感谢任何帮助,谢谢!

【问题讨论】:

  • 试试printf("Enter an amount: ");fflush(stdout);
  • 成功了!这仅仅是因为我使用标准输出作为我的运行控制台而有必要吗?如果是这样,我应该把它放在任何将使用访问缓冲区的函数的程序的开头吗?谢谢
  • 也许我认为那是因为您在 IDE 中运行。如果您想直接在控制台上运行,可能不需要。

标签: c netbeans scanf netbeans-8.1


【解决方案1】:

ISO/IEC 9899:201x

文件

...当流被行缓冲时,字符旨在作为一个块传输到主机环境或从主机环境传输一个换行符 遇到字符。 …

您的标准输出流似乎是行缓冲的,这是最常见的。

试试printf("Enter an amount: ");fflush(stdout); - BLUEPIXY

成功了!这仅仅是因为我使用标准输出作为我的运行控制台才需要吗?

不,您的程序打开的其他流甚至可能被完全缓冲

如果是这样,我应该把它放在任何程序的开头吗? 将使用访问缓冲区的函数吗?

fflush(stdout) 放在程序的开头是不行的,因为它只输出一次已经在stdout 缓冲区中的内容。但是你可以在那里使用setbuf(stdout, NULL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2020-04-11
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多