2016-12-30 237 views
-2

我有一个程序由于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

没有。

+0

你应该和所有的警告和调试信息编译('GCC -Wall -Wextra -g'如果使用[GCC](http://gcc.gnu.org/)...),改善你的代码直到你没有警告,然后**使用调试器**('gdb')。你的for循环是错误的。 –

+0

您的* fix-my-code *问题在这里是焦点话题。 –

+1

到目前为止请显示您的研究/调试工作。请先阅读[问]页面。 –

回答

6

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

否则,循环条件不满足,并且循环体完全没有执行。

这就是说,按照您的要求,

  1. 你需要移动检查块

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

    printf()语句之前,以避免无条件打印。

  2. for循环条件应该真正的样子

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

    ,只要你想输出被限制为19

+0

嗨,我试过了,但它似乎没有工作 –

+0

道歉,为上述评论。我的代码段与它一起工作,但我原来的程序没有。非常抱歉的混淆。 –

+2

@MythicCocoa在这种情况下,您需要创建一个MCVE。 –

1

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

样品伪代码如下。

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

} 
1

我想利用这里的可教时刻。这似乎是误解for声明中条款的一个简单问题。 for语句只是编写while循环的快捷方式,其中内置了初始化和“after”代码。for语句在其括号化列表中有三个子句 - (init ; while ; after)。因此,让我们为和例子写成

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

以上for循环可以使用while循环被改写为

i = 0; 

while(i < 10) 
    { 
    do_something(); 

    i++; 
    } 

正如你可以看到一个for语句中使用时,for是一个很大的紧凑。

+0

我误解了第二条款的含义:P –

1

好友的代码看起来都搞砸了。理解循环的概念。在for循环中仔细听我说。

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

其次请注意,在显示值后应该发生循环的断开。为了清楚理解我已经给出了下面的代码。希望这有助于。

#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; 
} 
+0

请使用正确的英文。 –

+0

@BobJarvis请不要把这当作冒犯。我认为这不是一个公平的指责理由。有些人因为他们的背景而不擅长英语(英语不是他们的第一语言)。看起来他来自印度(很多人在那里都不太懂英文,我从个人经历讲)。 –