2016-06-09 83 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];