如果条件为TRUE,则执行while循环增量(最佳方式?)

-3 c c++ increment post-increment do-while

确实很简单.

int main()
{
    int n,i,j;
    n = 20;
    i = 0;
    char ch[8];

    do
    {
        ch[i] = (n%2) + '0';
        n /= 2;
        // SIMPLE WAY
        if(n != 0)
            i++;
    }
    while(n != 0);

    for(j=0; j<=i; j++)
    {
        printf("%c",ch[i-j]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种方式

我尝试了下面的方法,但代码很糟糕

int main()
{
    int n,i,j;
    n = 20;
    i = 0;
    char ch[8];

    do
    {
        ch[i] = (n%2) + '0';
        n /= 2;
    }
    while(n != 0 && i++); // THIS

    for(j=0; j<=i; j++)
    {
        printf("%c",ch[i-j]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果使用BEST WAY循环为真,如何使值增加?或者只是纠正第二种方式while(n != 0 && i++)

chu*_*ica 6

如果使用BEST WAY循环为真,如何使值增加?
或者只是纠正第二路(n!= 0 && i ++)

我建议不要这样做.

无需进行特殊测试即可查看代码是否应增加i.

do {
  ch[i] = (n%2) + '0';
  n /= 2;
  i++;
} while(n != 0);
// Just decrement after the loop
i--;

for(j=0; j<=i; j++) {
    printf("%c",ch[i-j]);
}
Run Code Online (Sandbox Code Playgroud)

或者不要减少

do {
  ch[i] = (n%2) + '0';
  n /= 2;
  i++;
} while(n != 0);

for(j=0; j<i; j++) {
  printf("%c",ch[i-1-j]);
}
Run Code Online (Sandbox Code Playgroud)

或者do ... while也用于打印.

do {
  ch[i++] = (n%2) + '0';
  n /= 2;
} while(n);

do {
  printf("%c",ch[--i]);
} while (i);
Run Code Online (Sandbox Code Playgroud)

笔记:

char ch[8];对于int超出范围的范围来说太小了[-255 ... 255].对于32位int,使用char ch[32];或更宽.一般来说,使用 char ch[sizeof(int) * CHAR_BIT];

ch[i] = (n%2) + '0';肯定会产生意想不到的结果n < 0.unsigned改为考虑类型.