函数C无法打印

时间:2019-12-09 20:31:57

标签: c function printing

我的程序不会从setAverage和maximumNum变量中打印出任何值。我的编译器没有错误。我在这里想念什么?

#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLS 5

void arrayNumbers(float set_numbers[ROWS][COLS], int, int, float, float);
void inputData(float set_numbers[ROWS][COLS], int, int);

int main(){
  // 2D array of 15 numbers declaration and variables declared
  float set_numbers[ROWS][COLS], largestNum, setAverage;
  //counter variables for the loop
  int column, row;
  inputData(set_numbers, row, column);
  arrayNumbers(set_numbers, row, column, setAverage, largestNum);
      printf("\n");
      printf("\tThe total average of the set: %.1f\n", setAverage);
      printf("\tThe largest number in the array is: %.1f\n\n", largestNum);
  return 0;
  }

void inputData(float set_numbers[ROWS][COLS], int row, int column){
      printf("\tYou're given an array which is a 3-by-5 array.\n");
      printf("\tYou're going to put in each of the total 15 values.\n");
      printf("\t///////////////////////////////////////////////////\n");
  for(row = 0; row < ROWS; row++){
    for(column = 0; column < COLS; column++){
      printf("\tAdd data to position [%d]:[%d]", row + 1, column + 1);
      scanf("%f", &set_numbers[row][column]);
    }
  }
      printf("\n\tYour entered values are: \n\n");
  for(row = 0; row < ROWS; row++){
    for(column = 0; column < COLS; column++){
      printf("\t%.1f\t", set_numbers[row][column]);
    }
      printf("\n");
  }
}

void arrayNumbers(float set_numbers[ROWS][COLS], int row, int column,
                  float setAverage, float largestNum){
      printf("\t/////////////////////////////////////////////////////////");
      printf("//////////\n");
      printf("\n\tThe average of your 3-by-5 sets of numbers are: \n\n");
  float total, sum;
  for(row = 0; row < ROWS; row++){
    for(column = 0; column < COLS; column++){
      sum = 0;
      sum = sum + set_numbers[row][column];
      total = total + set_numbers[row][column];
      setAverage = total / (COLS * ROWS);

      if(largestNum < set_numbers[row][column]){
          largestNum = set_numbers[row][column];
          }
        }
        printf("\n\tAverage of row [%d]: %.1f\t", row + 1, sum/COLS);
    }
  }

我似乎找不到找到我错过AF值或进行错误计算的地方。在为我的工程课程提交程序之前,这是我最后需要做的事情。我检查了其他一些stacoverflows,但没有发现有用的信息。

3 个答案:

答案 0 :(得分:0)

您永远不会实例化两个变量(setAverage,largestNum)为初始值。如果它们是垃圾数据,那么负责设置maximumNum的不平等可能永远不会成立。不过,真正的问题是you're passing them by value,并希望它们在函数返回时得到更新。

答案 1 :(得分:0)

在函数arrayNumbers(set_numbers,row,column,setAverage,maximumNum);中 setAverage和maximumNum由值(https://www.geeksforgeeks.org/passing-by-pointer-vs-passing-by-reference-in-c/)传递。因此值将不会更新。

在arrayNumbers函数中,sum放在2个循环内。所以它只是该行的最后一个值。

答案 2 :(得分:0)

要回答OP的问题,我复制了您的代码并在onlinegdb上运行它。它提示我输入15次输入,这就是 inputdata 函数的作用。如果这是您要询问的问题,程序就坐在那里等待用户输入

  

我的程序不会从setAverage和   最大数字变量。我的编译器没有错误。我是什么   在这里失踪

对于这个特定的编译器,当两个数字都初始化为0时,它会为两个数字输出0,就像其他人所说的那样,您将必须通过指针传递而不是通过值传递。