c++ - 如果条件为 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++)
解决方案
仅当使用 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
类型。
推荐阅读
- qt - 设置了 `WA_DeleteOnClose` 属性的堆栈 QDialog 上的`double free or corruption (out)` 错误
- python - API文档中的Furo Sphinx主题大写太多
- visual-studio-code - 如何在 vscode 中设置 CMAKE_CXX_COMPILER 变量
- c++ - C ++是否可以在不继承类的情况下覆盖类的实现(重新实现)方法?
- google-cloud-platform - 将 JSON 数据文件添加到 GCP Dataflow 包并在代码中使用它
- telegram - MTProto 中的模拟 searchChatsNearby 方法
- mysql - 将数据从日期时间列移动到日期列
- java - ArrayoutofBounds 发现异常无法解决
- r - 如何在 Ggplot2 标签中使用“符号 = 数字”和“字符 = 数字”
- java - 为什么 java 编译器需要一个看似无用的包装函数来类型检查泛型边界?