C编程。为什么“这个”代码有效但不是“那个”代码?

时间:2012-04-16 23:54:38

标签: c

您好我正在学习测试C编程课程的介绍,昨天我试图编写这个程序来打印2和用户输入的任何数字之间的偶数素数我花了大约2个小时试着写它正确,最终我做到了。我在下面上传了2张照片。其中一个显示正确的代码和正确的输出。另一个显示我第一次尝试这个问题并没有正常工作,我回过头来使它尽可能地与工作代码类似,而不是直接复制和粘贴所有东西。

遗憾的是,不允许新用户发布图片,希望以下链接可以正常使用。

这失败了,它不会打印自然平方根范围内的所有数字:

for (i = 2; i <= x; i++)
{
   //non relevant line
   a = sqrt(i);
   aa = a * a;
   if (aa == i); 
       printf("%d ",i);
}

来源:http://i.imgur.com/WGG6n.jpg

虽然这样做成功,但使用自然sqaure root打印偶数

for (i = 2; i <= x; i++) 
{
   a = sqrt(i);
   aa = a * a;
   if (aa == i && ((i/2) *2) == i)
        printf("%d ", i);
}

来源:http://i.imgur.com/Kpvpq.jpg

希望您能看到并阅读我在这里的屏幕截图。我知道'错误代码'图片没有(i / 2)* 2 == i部分,但我认为它仍会打印奇数和偶数,它还有代码来计算“sqrd”但是这不应该影响输出。如果我在最后一部分错了,请纠正我。

是的我正在使用Dev-C ++,我读过这个程序有点蹩脚但是我最初在代码:: blocks上做了这个并且它做了同样的事情......

请非常感谢任何建议或建议,以便在我真正获得适合我的代码前2小时做错了。

谢谢你, 亚当

2 个答案:

答案 0 :(得分:9)

你的代码包含:

if (aa == i);
//          ^
   printf(...);

[注意if条件末尾的;]

因此,如果aa == i - 发生一个空语句,并且总是发生打印,因为它超出了if语句的范围。

为了避免将来出现此问题,您可能希望在控制流语句后使用显式范围 1 [使用{} - 至少在第一次使用时编程语言的步骤。


1:斯巴达程序员可能会讨厌这个陈述

答案 1 :(得分:0)

这种错误很常见。我使用“step Over”,“Step Into”,“Break Points”和“watch window”来调试我的程序。使用这些选项,您可以逐行执行程序并跟踪每行中使用的变量。这样,你就会知道哪条线没有按照预期的方式执行。