for循环范围问题

时间:2012-10-19 18:26:23

标签: c++ arduino

我使用的代码如下:

const int NUMBER_OF_FIELDS = 3;
int fieldIndex = 0;
int values[NUMBER_OF_FIELDS];

void setup()
  {
  Serial.begin(9600);
  }

void loop()
  {
   if(Serial.available())
    {
     char ch = Serial.read();
     if(ch>='0' && ch <= '9')
       {
       values[fieldIndex] = (values[fieldIndex]*10 +(ch-'0'));
       }
      else if (ch == ',')
       {
        if(fieldIndex < NUMBER_OF_FIELDS -1)
        fieldIndex++;
       }
      else 
       {
       Serial.print(fieldIndex+1);
       Serial.println("fields recieved:");
       for (int i = 0; i<=fieldIndex; i++);
         {
         //Serial.println(values[i]);
         //values[i]= 0;
         }
        fieldIndex = 0; 
       } 
    } 
  }

但我收到的错误是:

'for'的名称查找已针对'范围

的新ISO'进行了更改

我认为我在for循环中没有做错任何问题,为什么我会收到此错误?

4 个答案:

答案 0 :(得分:6)

在for之后你有一个分号,因此只有for循环范围的int i在for循环之外无效。

您可能打算执行以下操作。

  for (int i = 0; i<=fieldIndex; i++)     // no semicolon
  {
     Serial.println(values[i]);
     values[i]= 0;
  }

答案 1 :(得分:4)

您使用;

“关闭”for循环的问题
for (int i = 0; i<=fieldIndex; i++); // <-----

答案 2 :(得分:3)

for (int i = 0; i<=fieldIndex; i++); <-----

答案 3 :(得分:2)

问题是你的for循环什么都不做:循环体在循环后立即以分号结束:

for (int i = 0; i<=fieldIndex; i++);
                                   ^ here

也就是说,如果在循环后的块中取消注释i的使用,则会出现错误。这在某些编译器中是合法的,即i循环中声明的for实际上是在封闭范围内声明的。这在标准化期间发生了变化(对于C ++ 1998)。