【问题标题】:Functions C won't print函数 C 不会打印
【发布时间】:2019-12-09 20:31:57
【问题描述】:

我的程序不会从 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);
    }
  }

我似乎找不到丢失值或计算错误的地方。这是我在工程课程提交程序之前需要做的最后一件事。我检查了其他一些 stacoverflows,但没有发现任何有用的东西。

【问题讨论】:

标签: c function printing


【解决方案1】:

函数中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】:

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

    【讨论】:

      【解决方案3】:

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

      我的程序不会从 setAverage 中打印出任何值,并且 最大变量。我的编译器没有错误。我是什么 这里不见了

      对于这个特定的编译器,它会为两个数字打印出 0,因为它们被初始化为 0,并且像其他人所说的那样,您必须通过指针传递而不是通过值传递。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        • 2014-06-08
        • 2020-08-16
        相关资源
        最近更新 更多