Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使循环继续,直到目标完成_Loops_For Loop_While Loop_Arduino - Fatal编程技术网

Loops 使循环继续,直到目标完成

Loops 使循环继续,直到目标完成,loops,for-loop,while-loop,arduino,Loops,For Loop,While Loop,Arduino,我需要能够找到EEPROM内存的5个连续位,理想情况下最接近2(因为我有位#1和2与其他数据关联,并且希望事情保持有序)。我开发了这段代码,它可以工作,但是for循环在找到一组好的数字后继续 Serial.println(“转到分配号查找器”); 对于(int-AssignCheck=2;AssignCheck

我需要能够找到EEPROM内存的5个连续位,理想情况下最接近2(因为我有位#1和2与其他数据关联,并且希望事情保持有序)。我开发了这段代码,它可以工作,但是for循环在找到一组好的数字后继续

Serial.println(“转到分配号查找器”);
对于(int-AssignCheck=2;AssignCheck<250;AssignCheck++){
Serial.println(“找到一个好的分配号”+字符串(AssignCheck));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
}
}
}
}
}
}
然后我想我可以在它周围放置一个while循环,当变量设置为0而不是1时,while循环停止,所以我写了以下内容:(注意中间引入了while循环、变量和
Scanner=0
行)

Serial.println(“转到分配号查找器”);
int扫描器=1;
while(扫描器==1){
对于(int-AssignCheck=2;AssignCheck<250;AssignCheck++){
Serial.println(“找到一个好的分配号”+String(AssignCheck)+“。Scanner value=“+String(Scanner));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
扫描仪=0;
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
}
}
}
}
}
}
}
当我需要时,它会正确地识别变量并将其设置为0,但是while循环似乎没有影响,并且循环继续生成可以工作的数字集

作为一个程序员新手,我不确定下一步可以尝试什么


任何建议都将不胜感激。

在这种情况下,您可以使用说明
break

Serial.println(“转到分配号查找器”);
对于(int-AssignCheck=2;AssignCheck<250;AssignCheck++){
Serial.println(“找到一个好的分配号”+字符串(AssignCheck));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
打破
}
}
}
}
}
}
正如你所看到的,它正是你想要的

请注意,您的第二次尝试不起作用,因为
for循环
在while内:它在整个
for循环
之前完成,之后比较
while循环的“scanner”变量

您可以通过以下方式进行更正:

Serial.println(“转到分配号查找器”);
int扫描器=1;
对于(int AssignCheck=2;(AssignCheck<250)和(Scanner==1);AssignCheck++){
Serial.println(“找到一个好的分配号”+String(AssignCheck)+“。Scanner value=“+String(Scanner));
如果(EEPROM.read(AssignCheck)=255){//查找可用于存储新卡的空白
如果(EEPROM.read(赋值检查+1)==255){
如果(EEPROM读取(赋值检查+2)==255){
如果(EEPROM读取(赋值检查+3)==255){
如果(EEPROM读取(赋值检查+4)==255){
扫描仪=0;
Serial.println(“找到的分配号”+字符串(AssignCheck)+”到“+字符串(int(AssignCheck)+4)+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
}
}
}
}
}
}

阅读EEPROM是昂贵的,请考虑如下:

Serial.println(“转到分配号查找器”);
int扫描器=1;
字符滚动缓冲区[5];
rollingBuffer[0]=EEPROM.read(2+0);
rollingBuffer[1]=EEPROM.read(2+1);
滚动缓冲区[2]=EEPROM.read(2+2);
rollingBuffer[3]=EEPROM.read(2+3);
rollingBuffer[4]=EEPROM.read(2+4);
点滚动=0;
对于(int AssignCheck=7;(AssignCheck<255);AssignCheck++)
{
如果((rollingBuffer[0]==255)&&&(rollingBuffer[1]==255)&&(rollingBuffer[2]==255)&&(rollingBuffer[3]==255)&(rollingBuffer[4]==255))
{
Serial.println(“找到的分配号”+字符串(AssignCheck-5)+”到“+字符串(int(AssignCheck-1))+”。Scanner value=“+字符串(Scanner));
int StoreValue=AssignCheck;
打破
}
rollingBuffer[pointRoll]=EEPROM.read(赋值检查);
pointRoll++;
如果(pointRoll>4)pointRoll=0;
}

只需添加一个
中断if
?中的code>,或者在
for
循环中的条件中添加第二个中断条件的检查,如果您需要while for something其他内容如何不编写正确的C代码:使用5个嵌套的if语句而不是循环。另外,为什么5个未编程的eeprom单元是理想的结果?这没有任何意义。XY问题。“读取EEPROM很昂贵”那么为什么要读取i