Почему эта функция не показывает правильный результат в качестве вывода? - PullRequest
0 голосов
/ 28 августа 2018

Выход этой функции каждый раз:

Строка с минимальной суммой равна 1, чья сумма равна 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;
 }

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

это будет работать

#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;
 }
0 голосов
/ 28 августа 2018
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;
}
0 голосов
/ 28 августа 2018

Посмотрите внимательно на minSum. Вы явно не инициализируете его перед использованием в этом тесте:

if (sum < minSum)

Поэтому, если вы запускаете отладочную сборку и она инициализируется нулем, она никогда не изменится, если сумма не будет <0. </p>

Обратите внимание, что ссылка на неинициализированное значение является неопределенным поведением, чего следует избегать любой ценой.

  1. Попробуйте ввести все числа как отрицательные.

  2. Попробуйте установить значение INT_MAX и повторите попытку. Обратите внимание, что это правильное решение проблемы.

Как еще одно редакционное замечание, вероятно, не стоит изменять размеры массива. Как заявлено в main() m - 50 на 50. Но вы фактически просматриваете его как 3 на 3 в findRowWithMinimalSum(). Это не очень хорошая привычка, я могу в значительной степени гарантировать, что это вызовет у вас проблемы в будущем.

Наконец, найдите себе отладчик. Это выскочило бы прямо с экрана, если бы вы пошагово проходили через findRowWithMinimalSum(), наблюдая, как переменные меняются по мере продвижения программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...