我今天安装了NetBeans 7.0.1,当我尝试执行带有“scanf”的C程序时,它会给出奇怪的错误。这是我的代码:
程序会一直运行,直到我在输出控制台中输入一些内容:
在输入之后,它显示printf语句并显示“RUN FAILED”:
请问有人能告诉我该怎么做才能解决这个问题吗?
![Program](https://istack.dev59.com/ZYRzp.webp)
![enter image description here](https://istack.dev59.com/JRIvA.webp)
![enter image description here](https://istack.dev59.com/i02Pm.webp)
return 0;
并保证它仍将返回0,但您不能在其他任何地方依赖此行为。 - FatalError你没有返回0
,这表示成功终止操作系统,也没有在你的printf
后面加上一个尾随的\n
,导致该行未打印(stdin被缓冲):
#include <stdio.h>
int main()
{
int n;
printf("Enter the number:\n");
scanf("%d", &n);
return 0;
}
一个没有返回值的C程序将导致未定义的行为(这被一致认为是一件坏事©)。编译器在此处允许自由返回,它似乎返回scanf()的结果,但对于C标准来说,它可能会返回一些大气熵。
至于该行未打印的原因,那是因为你在缓冲终端上使用printf(),你需要在末尾添加\n。这背后的原因可以追溯到古老的Unix方式,现在只有最明智的Unix大师才记得。
至于在输入之前什么都不发生,那是因为scanf()会阻塞直到接收到输入,如果你还不知道的话。虽然可以使用非阻塞IO调用,但我不确定这是否在你的问题范围内。(请定义“使其正确”)。
添加返回代码。 main()
返回一个 int,因此在您的 main()
函数底部添加 return 0;
。目前,返回的值是垃圾值,通常除了 0 以外的任何值都表示失败。
另外,您可能需要考虑将其改为:
int main(void)
更明确地说(虽然这里不会改变任何东西)。