c - Main 无法正确调用函数 "makeArray"

标签 c arrays function 2d

我不太确定问题是什么,但我的函数 makeArray 在读取文件时不会存储值,因此数组只是吐出垃圾而不是我需要的值。

这是我的函数

#include <stdio.h>
#include <stdlib.h>
#define ROW 12
#define COL 8

void makeArray(FILE *infile, int array[][8]) {
    int i, j;
    infile = fopen("scores.txt", "r");

    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            fscanf(infile, "%d", &array[i][j]);
        }
    }
    fclose(infile);
}

这里是主要内容:

int main() {
    int choice, array[ROW][COL] = { 0 };
    FILE *infile;

    makeArray(infile, array);

    do {
        displayMenu();
        scanf("%d", &choice);
        processRequest(array, choice);
    } while (choice != 0);

    return 0;
}

整个代码如下:

#include <stdio.h>
#include <stdlib.h>

#define ROW 12
#define COL 8

void makeArray(FILE *infile, int array[][8]) {
    int i, j;

    infile = fopen("scores.txt", "r");

    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            fscanf(infile, "%d", &array[i][j]);
        }
    }
    fclose(infile);
}

int getScore(int array[][8], int month, int game) {

    int score;

    array[month-1][game-1] = score;

    return score;
}

int getMonthMax(int array[][8], int month) {

    int i, max;

    for (i = 0; i < COL; i++) {
        if (array[month - 1][i] > max) {
            max = array[month - 1][i];
        }
    }   
    return max;     
}

int getYearMax(int array[][8]) {

    int i, j, max;

    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            if (array[i][j] > max) {
                max = array[i][j];
            }
        }
    }
    return max;
}

float getMonthAvg(int array[][8], int month) {

    int i, sum = 0, num = 0, j = 0;
    float avg;

    for (i = 0; i < COL; i++) {
        array[month - 1][i] = num;
        sum += num;
        j++;    
    }
    avg = (sum / j);
    return avg;
}

float getYearAvg(int array[][8]) {

    int i, j, k, sum = 0, num;
    float avg;

    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            array[i][j] = num;
            sum += num;
            k++;
        }
    }
    avg = (sum / k);
    return avg;
}

int toursMissed(int array[][8]) {

    int i, j, k;

    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++){
            if (array[i][j] == 0)
                k++;
        }
    }
    return k;
}

void displayMenu() {

    int i, com;

    printf("What would you like to do?\n");
    for (i = 0; i < 40; i++) {
        printf("-");
    }
    printf("\nSelect from option 1-7 or 0 to stop\n");
    printf("Select 1 to get the score for a specific game\n");
    printf("Select 2 to get the max score for a specific month\n");
    printf("Select 3 to get the average score for a specific month\n");
    printf("Select 4 to get the max score for the year\n");
    printf("Select 5 to get the average score for the year\n");
    printf("Select 6 to get the number of tournamnets missed for the year\n");
    printf("Select 7 to print all scores for the year\n");
    printf("Select 0 to stop\n");
    for (i = 0; i < 40; i++) {
        printf("-");
    }
    printf("\n");

}

void printArray(int array[][8]) {

    int i, j;

    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            printf("%d\t", &array[i][j]);   
        }
        printf("\n");
    }
}

void processRequest(int array[][8], int integer) {

    int f1, f2, f3, f4, f5, f6, f7, f8;
    int mont, gam;


    if (integer == 0) {
        printf("\nThank you!  Goodbye\n");
    }
    if (integer == 1) {
        printf("\nPlease enter the month and the game\n");
        scanf("%d%d", &mont, &gam);
        f1 = getScore(array, mont, gam);
        printf("\nThe score for Tournament %d is %d", gam, f1);
    }
    if (integer == 2) {
        printf("\nPlease enter the month\n");
        scanf("%d", &mont);
        f2 = getMonthMax(array, mont);
        printf("\nThe max score for month %d was %d\n", mont, f2);
    }
    if (integer == 3) {
        printf("\nPlease enter the month\n");
        scanf("%d", &mont);
        f3 = getMonthAvg(array, mont);
        printf("\nThe average score for month %d is %4.2f\n", mont, f3);
    }
    if (integer == 4) {
        f4 = getYearMax(array);
        printf("\nThe max score for the year is %d\n", f4);
    }
    if (integer == 5) {
        f5 = getYearAvg(array);
        printf("\nThe average score for the year is %4.2f\n", f5);
    }
    if (integer == 6) {
        f6 = toursMissed(array);
        printf("\nThe number of tournaments missed for the year is %d\n", f6);
    }
    if (integer == 7) {
        printf("\nThe scores for the year are:\n");
        printArray(array);
    }
}

int main() {

    int choice, array[ROW][COL] = { 0 };
    FILE *infile;

    makeArray(infile, array);

    do {
        displayMenu();
        scanf("%d", &choice);
        processRequest(array, choice);
    } while (choice != 0);

    return 0;
}

不确定是否有必要提供所有这些信息,但现在可以使用。

最佳答案

您的代码中存在多个问题:

  • 主要问题是你无法判断数组是否被正确读取,因为函数 printArray() 中的转储代码不正确:printf("%d\t", &array[i][j]);应该读 printf("%d\t", array[i][j]);

  • 函数makeArray需要 FILE *infile其值被忽略的参数。您应该将此参数设置为局部变量,或者在调用者中打开文件并传递 FILE*或者可能将文件名作为参数传递。

  • 您没有测试任何返回值是否正确完成:fopen可返回NULL如果文件无法打开。使用NULL流指针将调用大多数标准 I/O 函数中未定义的行为。

  • 您没有测试 scanf() 的返回值不是fscanf() 。如果提供了不正确的输入,程序将调用未定义的行为,并且用户将不知道在哪里寻找解释。检查所有返回值并生成清晰的记录错误消息。

  • 函数 getScore是不正确的。它应该是:

    int getScore(int array[][8], int month, int game) {
        return array[month - 1][game - 1];
    }
    
  • 定义 COL如果你硬编码COL的值是没有用的函数中的 8 :数组是使用显式常量定义的,而不是 COL宏。

  • 函数 getYearAvg()getMonthAvg()商店num放入数组而不是从数组中读取。此外,avg未初始化为0.0 .

  • k未初始化为0toursMissed()不是getYearAvg() .

  • max 应初始化为 array[0][0]getYearMax()getMonthMax()

最后makeArray()如果输入正确,这是唯一不会失败的功能。

关于c - Main 无法正确调用函数 "makeArray",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599711/

相关文章:

c - 有没有办法在 Eclipse 中启用所有宏?

c - 为什么不能重新分配字符串数组,但是字符串指针可以使用C语言?

php - 如何使用php在json文件中查找数据

javascript - 动态调用类函数

c - STM32外部中断一直触发

c - 当函数需要指针时传递常量整数

java - Java中使用字符串数组时出现空指针异常

arrays - Postgres - 从 jsonb 数组中删除元素

c++ - 没有函数指针参数的隐式向上转换?

c - 如何以正确的方式将结构的数组传递给我的函数?