【发布时间】:2019-02-21 09:19:07
【问题描述】:
下面我遇到奇怪问题的代码旨在修剪整数数组的未使用部分,然后将其转换为字符串。
例如:
_ABC__DE______ 将变为 _ABC__DE。
当输入用默认字符填充时,问题就会出现。 (示例中为“_”)。
sLength是整数数组chars的长度
有问题的代码:
int inputLength = sLength - 1;
while (chars[inputLength] == defaultChar && inputLength >= 0) {
inputLength--;
}
inputLength++;
Serial.println("input length: " + String(inputLength));
// (in)sanity check
Serial.println(inputLength);
Serial.println(String(inputLength));
Serial.println(inputLength <= 0);
Serial.println(0 <= 0);
Serial.println(inputLength == 0);
Serial.println(0 == 0);
if (inputLength <= 0) {
//reset cursor position
Serial.println("index set to 0");
index = 0;
} else {
output = "";
for (int i = 0; i < inputLength; i++) {
char c = charSet[chars[i]];
if (c == '_') {
c = ' ';
}
output += c;
}
done = true;
}
给定一个填充有defaultChar的数组时的输出:
input length: 0
0
0
0
1
0
1
如果我的解释正确,输出意味着偶数行上 0 > 0 和 0 =/= 0,但奇数行上 0
我想出的解决方法是替换
while (chars[inputLength] == defaultChar && inputLength >= 0) {
inputLength--;
}
使用以下之一
while (inputLength >= 0 && chars[inputLength] == defaultChar) {
inputLength--;
}
.
while (chars[inputLength] == defaultChar) {
inputLength--;
if (inputLength < 0) {
break;
}
}
两者都导致输出:
input length: 0
0
0
1
1
1
1
index set to 0
为什么这会改变结果? 据我目前所知,&& 运算符是可交换的。
有什么我错过的东西
chars[inputLength] == defaultChar && inputLength >= 0
不等于
inputLength >= 0 && chars[inputLength] == defaultChar?
如果相关,这是在 328P Arduino Nano 上运行,带有使用 IDE 1.8.8 的旧引导加载程序
【问题讨论】:
标签: c++ arduino embedded logical-operators