C编程.为什么"这个"代码有效但不是"那个"代码?

133*_*475 -3 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);
}
Run Code Online (Sandbox Code Playgroud)

来源: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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

我非常感谢任何建议或建议,以便在实际获取代码为我工作前2小时我做错了什么.

亚当,谢谢你

ami*_*mit 9

你在"那个"中的代码包括:

if (aa == i);
//          ^
   printf(...);
Run Code Online (Sandbox Code Playgroud)

[注意;if条件的结尾]

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

为了避免将来出现此问题,您可能需要使用明确的范围界定1 [使用{,}后控制流语句] -在你的编程语言的第一步,至少.


1:斯巴达程序员可能会讨厌这个说法