【发布时间】:2017-10-13 08:07:53
【问题描述】:
我需要能够找到 EEPROM 存储器的 5 个连续位,理想情况下最接近 2(因为我有与其他数据相关联的位 #1 和 2,并希望保持井井有条)。我开发了这段代码,它可以工作,但 for 循环在找到一组好的数字后继续。
Serial.println("got to assignment number finder");
for (int AssignCheck = 2; AssignCheck < 250; AssignCheck++){
Serial.println("Finding a good assignment number " + String(AssignCheck));
if (EEPROM.read(AssignCheck) == 255){ //Looks for a blank space which can be used to store the new card
if (EEPROM.read(AssignCheck + 1) == 255){
if (EEPROM.read(AssignCheck + 2) == 255){
if (EEPROM.read(AssignCheck + 3) == 255){
if (EEPROM.read(AssignCheck + 4) == 255){
Serial.println("Found assignment numbers " + String(AssignCheck) + " through to " + String(int(AssignCheck) + 4) + ". Scanner value = " + String(Scanner));
int StoreValue = AssignCheck;
}
}
}
}
}
}
然后我想我可以在它周围放一个 while 循环,一旦变量设置为 0 而不是 1,就让 while 循环停止,所以我写了这个:(注意 while 循环的引入,变量和中间的Scanner = 0 行)。
Serial.println("got to assignment number finder");
int Scanner = 1;
while (Scanner == 1){
for (int AssignCheck = 2; AssignCheck < 250; AssignCheck++){
Serial.println("Finding a good assignment number " + String(AssignCheck) + ". Scanner value = " + String(Scanner));
if (EEPROM.read(AssignCheck) == 255){ //Looks for a blank space which can be used to store the new card
if (EEPROM.read(AssignCheck + 1) == 255){
if (EEPROM.read(AssignCheck + 2) == 255){
if (EEPROM.read(AssignCheck + 3) == 255){
if (EEPROM.read(AssignCheck + 4) == 255){
Scanner = 0;
Serial.println("Found assignment numbers " + String(AssignCheck) + " through to " + String(int(AssignCheck) + 4) + ". Scanner value = " + String(Scanner));
int StoreValue = AssignCheck;
}
}
}
}
}
}
}
它在我需要时正确识别并将变量设置为 0,但 while 循环似乎没有影响,并且循环继续产生可以工作的数字集。
作为一名新手编码员,我不确定接下来可以尝试什么。
任何建议将不胜感激。
【问题讨论】:
-
只需在最后一个
if中添加一个break;? -
或者如果你需要 while 来做别的事情,在
for循环的条件中添加第二个中断条件的检查 -
如何编写正确的 C 代码:使用 5 个嵌套的 if 语句而不是循环。另外,为什么 5 个未编程的 eeprom 单元是理想的结果?这没有任何意义。 XY 问题。
标签: loops for-loop while-loop arduino