2013-10-08 102 views
-2

在第一個'for'循環中,無論我賦予n的值有多大,它都會運行一次。爲什麼?循環未在提及時間運行

#include<stdio.h> 

int main() 
{ 
    int n, a[6], i, j, n1, n2; 
    float area=0.00, ma=0, mia=0; 

    scanf("%d", &n); 
    for(i=1; i<=n; i++) 
    { 
     for(j=1; j<=6; j++) 
      scanf("%d", &a[j]); 

     area = (a[1]*(a[4]-a[6])+a[3]*(a[6]-a[2])+a[5]*(a[2]-a[4]))/2; 

     if(area<0) 
      area = -area; 

     if(i == 0) 
      mia = area; 

     if(area >= ma) 
     { 
      ma = area; 
      n1 = i; 
     } 

     if(area <= mia) 
     { 
      mia = area; 
      n2 = i; 
     } 

    } 
    printf("\n%d %d", n1, n2); 
    return 0; 
} 
+1

*什麼*正在運行一次? printf語句?循環?由於printf語句在循環之外,因此它只能運行一次。 –

回答

4

你在這裏超越a

for(j=1;j<=6;j++) 
    scanf("%d",&a[j]); 

(通過循環中的最後一次,你寫a[6],當只有a[0]通過a[5]存在)

請記住,在C,數組索引編號從0開始,而不是1

上次作業很有可能會覆蓋i,這取決於變量在內存中的位置。下一次循環時,i等於上次輸入的內容,加上1

或者,n可能被覆蓋。各種各樣的事情可能正在發生。無論是調整指數,或(如快速測試)更改聲明:

int n,a[7],i,j,n1,n2; 

,看看事情表現得更加出色。

+0

謝謝!現在我得到了正確答案。 – Maverick

0

把一個printf在第一for循環,你就會知道它運行n+1倍,不只是一次。我只需在本地計算機上運行代碼n=3