如何跳过for循环中的某些数字?

How to skip certain numbers in a for-loop?

我开始在 C 中练习 for 循环,到目前为止我理解了它背后的主要原理。但我不知道如何获得以下输出:

1 2 3  5 6 7  9 10 11 ...

我成功地使用以下 for 循环打印了 1 到 12,但是我如何跳过 4 和 8 或者如何跳过一般的任何数字?

for(int i = 1; i < 12; i++)
{
    printf("%d", i);
}

最简单的解决方案是使用 if 语句检查您不需要的任何值。 如果你有一条规则,比如不打印所有能被 4 整除的数字,你可以像这样制作你的 if 语句

if(i % 4 == 0)
{
   //print
}

没有办法专门用 for 循环表达式来做。

如果你想做特定的数字,你只需在 if 语句中添加更多条件:

    for(int i = 1; i < 12; i++)
    {
        if(i != 11 && i != 5 && i%3 != 0)
        {
            printf("%d", i);
        }
    }

最好的方法,特别是对于大量的不规则异常,是下面的方法。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int exceptionsv[] = {4, 8};
    int exceptionsc = sizeof(exceptionsv)/sizeof(exceptionsv[0]);
    
    for(int i = 1; i < 12; i++)
    {
        for(int j = 0; j < exceptionsc; j++)
        {
            if(exceptionsv[j] == i) i++;
        }
        printf("%d ", i);
    }
}

你也可以在循环体内使用 if 语句,比如

for ( int i = 1; i < 12; i++ )
{
    if ( i % 4 != 0 )
    {
        printf( "%d ", i );
    }
}

或者你可以在for循环的第三个表达式中避免被4整除的数字,比如

for ( int i = 1; i < 12; i += ( i + 1 ) % 4 == 0 ? 2 : 1 )  
{
    printf( "%d ", i );
}

如果您需要输出 space 字符而不是可被 4 整除的数字,您可以在循环体内使用 if-else 语句。例如

for ( int i = 1; i < 12; i++ )
{
    if ( i % 4 != 0 )
    {
        printf( "%d ", i );
    }
    else
    {
        putchar( ' ' );
    }
}
for (char i=0; i<12; i++) { if (i%4 != 0) printf("%d", i); }

或者您可以隔离模式并使用嵌套循环复制它:

char patternCount = 3;
for (char i=0; i<patternCount; i++) { 
    for (char j=1; j<4; j++) printf("%d", i*4 + j); 
}