-3

您好,我正在学习 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

虽然这成功了,并用自然平方根打印偶数

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++,这有点糟糕,但我最初是在 code::blocks 上这样做的,它做了同样的事情......

请我非常感谢任何关于我在实际让该死代码为我工作之前 2 小时做错了什么的建议或建议。

谢谢你,亚当

4

2 回答 2

9

您在“that”中的代码包括:

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

[注意;if 条件末尾的 ]

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

为避免将来出现此问题,您可能希望使用显式范围1 [使用{, }after control flow statements] - 至少在您对语言进行编程的第一步中。


1:spartan 程序员可能会讨厌这种说法

于 2012-04-17T00:01:08.670 回答
0

此类错误很常见。我使用“step Over”、“Step Into”、“Break Points”和“watch window”来调试我的程序。使用这些选项,您可以逐行执行程序并跟踪每行中使用的变量。这样,您将知道哪一行没有以所需的方式执行。

于 2014-02-11T12:41:04.517 回答