由于无关的空printf语句,C程序输出完全改变

时间:2016-03-29 15:37:29

标签: c arrays printf

我这里有这个C程序代码,它决定了数组的最高连续值:

#include <stdio.h>

int inputs[8];
int calcSum(int i, int j);

int main(void) {
        int i, j, maxSum = 0, tempSum = 0;
        int length = sizeof(inputs)/sizeof(inputs[0]);
        for(i=0;i<length;i++) {
                scanf("%d", &inputs[i]);
        }
        for(i=0;i<length;i++) {
                for(j=i;j<length;j++) {
                        tempSum = calcSum(i,j);
                        if(tempSum > maxSum) {
                                maxSum = tempSum;
                        }
                }
        }
        printf("%d\n", maxSum);
        return 0;
}

int calcSum(int i, int j) {
        int c, sum;
        for(c=i;c<=j;c++) {
                sum+=inputs[c];
        }
        return sum;
}

即使这段代码对我来说是正确的,它也会输出错误的结果。在printf("")tempSum = ...之间添加任何类型if(tempSum >...)(也可以为空)的采样将使代码输出所有测试用例的正确答案。我甚至从头开始重写了整个代码,但仍然遇到了同样的问题。 例如,数字序列:5 2 -1 -2 -4 3 5 -6应该输出8,一旦printf("")被添加就会输出,否则输出38 ...我不知道为什么。你能解释一下,我哪里出错了吗?

1 个答案:

答案 0 :(得分:7)

在此代码中:

int calcSum(int i, int j) {
    int c, sum;
    for(c=i;c<=j;c++) {
            sum+=inputs[c];
    }
    return sum;
}

您需要确保将sum初始化为起始值:

int calcSum(int i, int j) {
    int c, sum;
    sum=0;
    for(c=i;c<=j;c++) {
            sum+=inputs[c];
    }
    return sum;
}