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

zer*_*ero -4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

A B*_*A B 7

在这段代码中:

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

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

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