2012-10-19 112 views
0

我使用看起来像代码:for循环范围界定问题

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; 
     } 
    } 
    } 

但我得到一个错误,指出:

的名称查找 'I' 改为新的ISO '的' 作用域

我不认为我在for循环中做了任何错误,所以为什么我得到这个错误?

回答

6

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

您可能打算做以下事情。

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

哎哟!我现在觉得自己像个白痴。感谢的人 – EnderWiggins

+0

不用担心它花了我5分钟才注意到 –

4

,你面临的问题“封闭”的for循环与;

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

的问题是,你的for环路什么都不做:在循环体在分号结束右循环后:

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

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