问题描述
我已经编写了一个 while 循环来增加一个指针,直到内容为空字节或相邻元素之间的差异大于 1,并且这工作正常:
while (i[1] && *i + 1 == i[1]) i++;
然后我尝试将其重写为:
while (i[1] && *(i++) + 1 == *i);
但是通过这种方式,它陷入了无限循环,好像 i
没有被递增。为什么会这样?
编辑: 我必须为误导而道歉,但我现在发现它不会卡在我向您展示的 while 循环中,而是简单地退出该 while 循环,而是卡在其父循环中,让我与您分享整个代码:
char accepted[strlen(literal)+1];
strcpy(accepted,literal);
std::sort(accepted,accepted + strlen(accepted));
char *i = accepted-1;
while (*++i){
uint8_t rmin = *i;
//while (i[1] && *i + 1 == i[1]) i++;
while (i[1] && *(i++) + 1 == *i);
uint8_t rmax = *i;
ranges.push_back(Range{rmin,rmax});
if (!i[1]) break;//is this necessary?
}
我的问题不再有效。
是的,“聪明的”不可读代码是个坏主意。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)