首页 > 解决方案 > 如果条件为 TRUE,则在 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;
}

但我不喜欢这种方式

我尝试了以下方式,但代码很糟糕

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;
}

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

标签: c++cincrementdo-whilepost-increment

解决方案


仅当使用 BEST WAY 循环为真时,如何使值增加?
或者只是纠正第二种方式 while(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]);
}

或者根本不递减

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

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

或者do ... while也使用 a 进行打印。

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

do {
  printf("%c",ch[--i]);
} while (i);

笔记:

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

ch[i] = (n%2) + '0';时肯定会招致意想不到的结果n < 0。请考虑unsigned类型。


推荐阅读