2012-10-19 113 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)。