您好我正在学习测试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小时做错了。
谢谢你, 亚当
答案 0 :(得分:9)
你的代码包含:
if (aa == i);
// ^
printf(...);
[注意if条件末尾的;
]
因此,如果aa == i
- 发生一个空语句,并且总是发生打印,因为它超出了if语句的范围。
为了避免将来出现此问题,您可能希望在控制流语句后使用显式范围 1 [使用{
,}
- 至少在第一次使用时编程语言的步骤。
1:斯巴达程序员可能会讨厌这个陈述
答案 1 :(得分:0)
这种错误很常见。我使用“step Over”,“Step Into”,“Break Points”和“watch window”来调试我的程序。使用这些选项,您可以逐行执行程序并跟踪每行中使用的变量。这样,你就会知道哪条线没有按照预期的方式执行。