我使用的代码如下:
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循环中没有做错任何问题,为什么我会收到此错误?
答案 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 (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)。