-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++)
如果使用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改为考虑类型.