为什么此功能未将正确的结果显示为输出?

时间:2018-08-28 15:35:59

标签: c function

此函数每次的输出为:

  

总和最小的行是1,总和为0。

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

library(dplyr)

a<-c("dog","mouse",NA,"bird")
b<-c(NA,NA,"cat",NA)

coalesce(a,b)

[1] "dog"   "mouse" "cat"   "bird"

3 个答案:

答案 0 :(得分:4)

仔细查看minSum。在此测试中使用它之前,您无需显式初始化它:

if (sum < minSum)

因此,如果您正在运行调试版本,并且将其初始化为零,那么除非sum <0,否则它将永远不会更改。

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

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

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

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

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

答案 1 :(得分:0)

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

 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(f==0)
    {
    minSum=sum;
 f++;
  }
 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
indRowWithMinimalSum(3,3,m);
return 0;
}

答案 2 :(得分:-1)

这将起作用

#include<stdio.h>

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(i==0){
        minSum = sum;
        position = i;
    }
    else 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;
 }