Main 无法正确调用函数 "makeArray"
Main won't properly call on function "makeArray"
我不太确定问题出在哪里,但我的函数 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*
或可能将文件名作为参数传递。
您没有测试任何 return 值是否正确完成:如果文件无法打开,fopen
可以 return NULL
。使用 NULL
流指针将在大多数标准 I/O 函数中调用未定义的行为。
您不测试 scanf()
而非 fscanf()
的 return 值。如果提供的输入不正确,程序将调用未定义的行为,用户将不知道去哪里寻找解释。检查所有 return 值并生成清晰记录的错误消息。
函数 getScore
不正确。它应该是:
int getScore(int array[][8], int month, int game) {
return array[month - 1][game - 1];
}
如果您在函数中将 COL
的值硬编码为 8,则 定义 COL
是无用的:数组是使用显式常量而不是 [=23= 定义的]宏.
函数 getYearAvg()
和 getMonthAvg()
将 num
存储到数组中而不是从数组中读取它。此外,avg
未初始化为 0.0
.
k
未初始化为 0
in toursMissed()
而不是 getYearAvg()
.
max应该在getYearMax()
和getMonthMax()
中初始化为array[0][0]
最后,makeArray()
是唯一不会失败的函数,前提是输入正确。
我不太确定问题出在哪里,但我的函数 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*
或可能将文件名作为参数传递。您没有测试任何 return 值是否正确完成:如果文件无法打开,
fopen
可以 returnNULL
。使用NULL
流指针将在大多数标准 I/O 函数中调用未定义的行为。您不测试
scanf()
而非fscanf()
的 return 值。如果提供的输入不正确,程序将调用未定义的行为,用户将不知道去哪里寻找解释。检查所有 return 值并生成清晰记录的错误消息。函数
getScore
不正确。它应该是:int getScore(int array[][8], int month, int game) { return array[month - 1][game - 1]; }
如果您在函数中将 定义
COL
是无用的:数组是使用显式常量而不是 [=23= 定义的]宏.函数
getYearAvg()
和getMonthAvg()
将num
存储到数组中而不是从数组中读取它。此外,avg
未初始化为0.0
.k
未初始化为0
intoursMissed()
而不是getYearAvg()
.max应该在
getYearMax()
和getMonthMax()
中初始化为
COL
的值硬编码为 8,则 array[0][0]
最后,makeArray()
是唯一不会失败的函数,前提是输入正确。