use*_*873 2 c++ embedded arduino logical-operators
我遇到奇怪问题的下面的代码意味着修剪整数数组的未使用部分,然后将其转换为字符串.
例如:
_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;
}
Run Code Online (Sandbox Code Playgroud)
给定数组填充的输出defaultChar:
input length: 0
0
0
0
1
0
1
Run Code Online (Sandbox Code Playgroud)
如果我正确解释,输出意味着偶数行上0> 0和0 =/= 0,但奇数行上0 <= 0和0 = 0.
我提出的解决方法正在取代
while (chars[inputLength] == defaultChar && inputLength >= 0) {
inputLength--;
}
Run Code Online (Sandbox Code Playgroud)
使用以下之一
while (inputLength >= 0 && chars[inputLength] == defaultChar) {
inputLength--;
}
Run Code Online (Sandbox Code Playgroud)
.
while (chars[inputLength] == defaultChar) {
inputLength--;
if (inputLength < 0) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这两个都导致输出:
input length: 0
0
0
1
1
1
1
index set to 0
Run Code Online (Sandbox Code Playgroud)
为什么这会改变结果呢?据我所知,直到现在,&&运算符是可交换的.
是否有一些我缺少的东西
chars[inputLength] == defaultChar && inputLength >= 0
不等于
inputLength >= 0 && chars[inputLength] == defaultChar?
如果它是相关的,这是使用IDE 1.8.8在旧的引导加载程序上运行328P Arduino Nano