如果条件为TRUE(最佳方式?),则在do while循环中发布增量

时间:2018-10-28 20:58:44

标签: c++ c increment do-while post-increment

这确实很简单。

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++)

5 个答案:

答案 0 :(得分:6)

  

仅当使用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进行打印。

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

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

注意:

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类型。

答案 1 :(得分:1)

好吧,您可以随时这样做:

do {
   // code
} while(n != 0 && ++i);

这样,i的第一部分求值后,&&就立即增加,&&应用于n != 0和{{1 }}。

答案 2 :(得分:1)

在C ++中,您可以这样做:

std::cout << std::bitset<8>(n); // 00010100 for n = 20

如果领先的0没问题。

答案 3 :(得分:-1)

可能是这样的:

int n = 20;
int i = 7;
char ch[] = "00000000";
while (n) // if n already = 0 then do nothing
{
    ch[i--] = (n % 2) + '0'; // assign then increment
    n /= 2;                // shift to right same as n >>= 1;
}
printf ("%08s", ch);

答案 4 :(得分:-2)

do
{ .......... }while(n && i++ ? 1 : n);

有关&&动作的内容称为短路评估