我今天安装了NetBeans 7.0.1当我尝试使用“scanf”执行C程序时,它会发出奇怪的错误
这就是我写的:
它一直运行,直到我在输出控制台中输入内容。
输入后显示printf语句并显示“RUN FAILED”
有人可以告诉我该怎么做才能做到这一点?
答案 0 :(得分:9)
是的,我遇到了同样的问题,答案中的解决方案无法在我的机器上运行。搜索之后,我明白这个问题是关于Netbean的内部终端/控制台部分。内部控制台无法运行scanf功能。因此,请为您的项目使用外部终端。要做到这一点:
就是这样。
答案 1 :(得分:3)
您的printf没有被刷新,因此在程序结束之前它不会显示。
您没有显式返回main()中的值,因此返回scanf()的结果,该值为1,被解释为程序失败。
答案 2 :(得分:1)
如果没有,则需要在main的末尾返回0。
答案 3 :(得分:0)
您没有返回0
,表示已成功终止操作系统并且您没有在\n
上放置printf
,导致该行无法打印(stdin已缓冲):
#include <stdio.h>
int main()
{
int n;
printf("Enter the number:\n");
scanf("%d", &n);
return 0;
}
答案 4 :(得分:0)
没有返回值的C程序将导致未定义的行为(一致被认为是Bad Thing©)。允许编译器自由地返回它返回的内容,它似乎返回scanf()的结果,但它可能为所有C标准关注返回一些大气熵。
对于不打印的行,那是因为你在缓冲终端上使用printf(),你最后要添加\ n。这样做的原因可以追溯到古老的Unix方式,这些方式早已被除了最伟大的Unix大师之外的所有人所遗忘。
至于输入内容之前没有发生任何事情,那是因为scanf()阻塞直到收到输入,以防你还没有意识到这一点。可以使用非阻塞IO调用,但我不确定这是否在您的问题范围内。 (请定义“使这个正确”)。
答案 5 :(得分:-1)
添加返回代码。 main()
返回一个int,因此请在return 0;
函数的底部添加main()
。现在,返回的值是垃圾,通常除0以外的任何值都表示失败。
另外,您可以考虑制作它:
int main(void)
更明确(虽然这里不会改变任何内容)。