gpt4 book ai didi

c - 为什么这个函数没有显示正确的结果作为输出?

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:09 25 4
gpt4 key购买 nike

这个函数每次的输出是:

The row with minimal sum is 1 whose sum is 0.

但我希望它计算每行的总和,然后显示最小行及其总和。如果我将此代码用作程序而不是函数内部(如本例),它会显示正确的结果。

void findRowWithMinimalSum(int row, int col, int A[row][col]){
int i,j,sum,minSum,position;

for(i=0; i<row; i++){
printf("\nGive the elements of row %d:\n", i+1);
for(j=0; j<col; j++)
scanf("%d", &A[i][j]);
}

for(i=0; i<row; i++){
for(j=0; j<col; j++)
printf("%d", A[i][j]);
printf("\n");
}

for(i=0; i<row; i++){
sum=0;
for(j=0; j<col; j++){
sum = sum + A[i][j];
}
if(sum<minSum){
minSum = sum;
position = i;
}
}
printf("\nThe row with minimal sum is %d whose sum is %d", position+1, minSum);
}

int main(){
int row, column, m[50][50];

//function call
findRowWithMinimalSum(3,3,m);
return 0;
}

最佳答案

仔细看minSum。在此测试中使用它之前,您没有明确地初始化它:

if (sum < minSum)

因此,如果您正在运行调试版本并且它被初始化为零,它永远不会改变,除非总和 < 0。

请注意,引用未初始化的值是未定义的行为,应不惜一切代价避免这种情况。

  1. 尝试将所有数字输入为负数。

  2. 尝试将其设置为 INT_MAX,然后重试。请注意,这是问题的正确解决方案。

作为另一条编辑评论,修改数组的维度可能不是一个好主意。正如在 main() 中声明的那样,m 是 50 x 50。但是在 findRowWithMinimalSum() 中,您实际上将其视为 3 x 3。这不是养成的好习惯,我几乎可以保证这样做会在将来的某个时候给您带来麻烦。

最后给自己一个调试器。如果您单步执行 findRowWithMinimalSum() 观察变量如何随着程序的进行而变化,这会立即跳出屏幕。

关于c - 为什么这个函数没有显示正确的结果作为输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com