2014-01-09 45 views
1

我在C中有一个非常简单的问题。我试图编写一个简单的程序,在10100之间输出10的倍数(包括:在闭区间[10,100] )跳过3070并垂直输出值。ac迭代,同时跳过do while while循环中的给定值

这里是我的代码:

#include<stdio.h> 
main() 
{ 
    int i=10; 
    do { 
    if(i==30||i==70) 
     continue; 

    printf("\n %d",i); 
    i++; 
    } while(i<100); 

    return 0; 
} 

程序停止在29跳过30,并继续成为永无止境的循环。哪里不对?

+0

http://msdn.microsoft.com/en-us/library/0ceyyskb.aspx – pcnThird

+0

很多人为这一个的声望点打炮...... –

回答

0

请勿使用continue。相反,打印出的值只要!=3070。同样重复10而不是1以输出倍数10

#include<stdio.h> 
main() 
{ 
    int i = 10; 

    do 
    { 
     if (i != 30 && i != 70) 
      printf("\n %d", i); 

     i += 10; 

    } 
    while (i <= 100); // if you want to print 100 

    return 0; 
} 

输出:

10 
20 
40 
50 
60 
80 
90 
100 

使用while (i <= 100);如果你需要同时打印100

+1

非常感谢你,这真的很有帮助 – drewjulo

3

问题是,当您点击if声明时,您正在跳过i的增量。所以你永远不会达到100!

#include<stdio.h> 
main() 
{ 
    int i=10; 
    do { 
    if(i==30||i==70) 
     continue;  //!!!! This will skip the i increment 

    printf("\n %d",i); 
    i++; 
    } while(i<100); 

    return 0; 
} 

我建议for循环:

main() 
{ 
    for (i = 10; i < 100; i++) { 
    if(i==30||i==70) 
     continue;   // The for loop will do the i++ on the "continue" 

    printf("\n %d",i); 
    } 

    return 0; 
} 
1

i达到30 continue语句移回到循环的开始。

因此循环继续不断,因为i不会从这一点递增。

0

它永远循环,因为你continue但不增加i。

if(i==30||i==70) { 
    i++; 
    continue; 
} 

或者你可以使用一个for循环像这样,

#include<stdio.h> 
int main() 
{ 
    int i=10; 

    for (; i < 100; i++) 
    { 
    if(i==30 || i==70) { 
     continue; 
    } 
    printf("\n %d",i); 
    } 

    return 0; 
} 
1

您的代码做什么它写做。 continue跳过增量指令,所以值达到30并卡在那里。将增量移动到循环体的起始处,或者更好的是,使用for而不是while

0

原因是i在do.while内部30之后从未增加。你需要增加它。

if (i == 30 || i == 70){ 
    i++; 
    continue; 
} 
2

mbratch正确地指出你的问题,但你可能要考虑一个for循环为这样的事情。它会防止这个特殊问题,因为增量是自动的。

我不会做整个事情给你,因为你明显是想学习,但是这应该让你开始:

for (i=0; i<100; i+= 1) 

你必须改变一些数字的该线,但希望你会明白他们改变他们的意思。