2016-06-09 25 views
0

以下是我的C代碼。我不知道爲什麼數組中的索引0處的值(以及meds和maxs)在循環的最後一次迭代中發生了變化。請幫忙。索引0處的數組值在C的循環結尾處發生變化

對不起,添加太多的打印語句。這些主要是爲了調試。

#include<stdio.h> 
#include<stdlib.h> 
#define SZ 10000 

typedef long long LL; 


LL min(LL x, LL y) 
{ 
    return x<y?x:y; 
} 

LL max(LL x, LL y) 
{ 
    return x>y?x:y; 
} 

struct triangle 
{ 
    LL sm, md, lg; 
}; 

int main() 
{ 
    int n, i, ans; 
    struct triangle obj[n]; 
    LL mins[n], meds[n], maxs[n]; 
    LL a, b, c; 
    scanf("%d%*c", &n); 
    for(i=0;i<n;i++) 
    { 
     scanf("%lld%lld%lld%*c", &a, &b, &c); 
     printf("Scanned : %lld%lld%lld\n", a, b, c); 
     obj[i].sm = mins[i] = min(a, min(b,c)); 
     obj[i].lg = maxs[i] = max(a, max(b, c)); 
     obj[i].md = meds[i] = max(min(a,b), min(max(a,b),c)); 
     printf("min : %lld\t med = %lld\t max = %lld\n", mins[i], meds[i], maxs[i]); 
     printf("min[0] = %lld\n", mins[0]); 
    } 

    printf("Outside : min[0] = %lld\n", mins[0]); 
    printf("mins : "); 
    for(i=0;i<n;i++) 
     printf("%lld ", mins[i]); 
    printf("\n"); 
    printf("meds : "); 
    for(i=0;i<n;i++) 
     printf("%lld ", meds[i]); 
    printf("\n"); 
    printf("maxs : "); 
    for(i=0;i<n;i++) 
     printf("%lld ", maxs[i]); 
    printf("\n"); 

    //printf("%d\n", ans); 
    return 0; 
} 
+0

'n'有多大?你可能有堆棧溢出調用未定義的行爲。永遠不要依靠外部輸入!檢查可接受的範圍,但更好地動態分配陣列。看到[問],提供**所有**必要的信息。並將代碼剝離到[mcve]。 – Olaf

+0

哪個循環?它如何改變?你可以發佈輸出,並提供最小的完整? – bipll

+0

編譯啓用所有警告並將它們視爲錯誤。 –

回答

4

您使用了未初始化的和不確定的n來確定數組的大小。在讀取n之後聲明數組如下:

int main() 
{ 
    int n, i, ans; 
    LL a, b, c; 
    if(scanf("%d%*c", &n) != 1) { 
     fputs("failed to read n\n", stderr); 
     return 1; 
    } 
    struct triangle obj[n]; 
    LL mins[n], meds[n], maxs[n];