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

Post Increment in do while loop if condition is TRUE (BEST WAY?)

本文关键字:循环 while do 则在 TRUE 条件 最佳 方式 如果      更新时间:2023-10-16

这确实很简单。

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

如何仅在使用BEST WAY的循环为true时使值递增
或者在(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);

备注:

对于范围CCD_ 6之外的CCD_。对于32位int,请使用char ch[32];或更宽的CCD_8。通常,使用char ch[sizeof(int) * CHAR_BIT];

CCD_ 10在CCD_。请考虑unsigned类型。

好吧,你总是可以做到:

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

这样,i&&的第一部分评估为True之后立即递增,并且&&应用于n != 0i的更新版本。

在C++中,您可以执行以下操作:

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

如果前导0正常。

它可以是这样的:

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);
do
{ .......... }while(n && i++ ? 1 : n);

关于&&动作的这些东西被称为短路评估