2017-09-26 55 views
-1
int SumBetween(int low, int high) 
{ 
    int i; 
    int end; 
    int Ray[high - low]; 
    int sum; 

    end = (high - low); 

    for (i = 1; i = end; i++) { 
     Ray[i] = low + i; 
    } 

    sum = 0; 
    for (i = 1; i = end; i++) { 
     sum = sum + Ray[i]; 
    } 

    return sum; 
} 

上面的函數跟上這個錯誤來:什麼我在我的C函數做錯了

main.c: In function 'SumBetween': 
main.c:12:2: error: suggest parentheses around assignment used as truth value [-Werror=parentheses] 
for (i = 1; i = end; i++) { 
^ 
main.c:17:2: error: suggest parentheses around assignment used as truth value [-Werror=parentheses] 
for (i = 1; i = end; i++) { 
^ 
cc1: all warnings being treated as errors 

我究竟做錯了什麼?

+4

爲什麼你有2個任務?你的意思是:for(i = 1; i tilz0R

+0

或'i <= end'? –

+1

是這個int ray [high - low];'有效嗎? – Gaurav

回答

2

您的問題不是技術上的錯誤,而是一個警告。就你而言,所有警告都表示爲錯誤,因爲編譯器檢測到代碼中可能存在的問題。

可以看出,你在有問題的for循環:

  1. 首先意味着賦值,通常i = 0爲數組與0開始用C
  2. 這是條件,在條件任何轉讓應在括號
  3. 三是增量或其他任何東西(新分配)

根據你的代碼,你應該重寫你的for循環來

//Start with i = 0 and go till end variable 
// 1  2  3 
for (i = 0; i < end; i++) { 
    Ray[i] = low + i; 
} 
+0

...並注意C中的數組來自0 ... n-1因此'for(i = 1' is wrong –

+0

@PaulOgilvie我做錯了什麼? – tilz0R

+0

不,我剛剛補充說他對C中數組的假設也是錯誤的,你修正了但沒有描述。 –

0

技術上你是爲()語句是一個死循環,如果end! = 0。 假設highlow大於(或價值相等),您可以通過避免二次迴路如下:

int SumBetween(int low, int high) 
{ 
    int i, end, sum = 0; 

    end = (high - low); 

    for (i = 1; i != end; i++) { 
     sum += low + i; 
    } 

    return sum; 
} 

順便說一句,我的建議依賴於你的假設需要達到從endi = 1