2013-10-08 72 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