为什么这个程序没有输出?

Why is this program giving no output?

我有一个程序由于其中的 for 循环而无法运行。我在这里粘贴了一段有效的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int numLoop = 19;
    int counter;
    int maxloops = 25;
    int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24;

    for (counter=1; counter==maxloops; counter++)
    {
        printf("%d \n", counter);

        if (counter == numLoop)
        {
            break;
        }

        if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5)
        {
            counter++;
            continue;
        }
    }

    return 0;
}

预期输出为:1 2 3 4 5 6 7 8 10 11 12 13 15 16 18 19

未打印任何内容。

for 循环条件出现错误。你想写 counter != maxloops 而不是 counter==maxloops.

否则不满足循环条件,根本不执行循环体

也就是说,根据您的要求,

  1. 你需要移动检查块

    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5)
    {
        counter++;
        continue;
    }
    

    before printf() 语句以避免 unconditional 打印。

  2. for循环条件应该真的像

    for (counter=1; counter < numloop; counter++)
                             ^^^^^^^^^^
    

    因为您希望输出限制为 19

您可能需要验证逻辑。 如果输出需要最多 19 次迭代。此外,在打印计数器之前应检查 inner-if 条件。

示例伪代码如下。

for (counter=1; counter<=numLoop; counter++)
{
    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5)
    {
        continue;
    }
 printf("%d \n", counter);

}

我想利用这里的教学时间。这似乎是误解 for 语句中的子句的简单问题。 for 语句只是编写 while 循环的快捷方式,内置了初始化和 "after" 代码。for 语句在其括号列表中包含三个子句 - (init ; while ; after)。因此,让我们使用 as 和示例 for 语句,它被写为

for(i = 0 ; i < 10 ; i++)
  {
  do_something();
  }

上面的 for 循环可以使用 while 循环重写为

i = 0;

while(i < 10)
  {
  do_something();

  i++;
  }

如您所见,for 更紧凑。

伙计,你的代码看起来一团糟。理解循环的概念。在 for 循环中仔细听我说。

你一直保持逻辑错误的条件。 循环将检查条件。你写的计数器应该等于 maxloop 这在你的代码中永远不会满足,因为当计数器达到值 19 时代码将退出(当计数器达到 19 时给出中断)。希望能解决第一部分。

其次请注意,循环中断应该发生 post 显示值。为了清楚地理解,我给出了下面的代码。希望这对您有所帮助。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int numLoop = 19;
int counter;
int maxloops = 25;
int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24;
for (counter = 1; counter <= maxloops; counter++)
{
if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5)
{
continue;
}
printf("%d \n", counter);
if (counter == numLoop)
break;
}
getchar();
return 0;
}