这就是我的文本文件中的内容。
6814,85,86,92,88
7234,76,81,84,78
6465,87,54,68,72
7899,92,90,88,86
9901,45,78,79,80
8234,77,87,84,98
7934,76,91,84,65
7284,56,81,87,98
7654,76,87,84,88
3534,86,81,84,73
这就是我编写的代码。
void getName(float arr1[x][y])
{
FILE* graFile;
float arr2[x][y];
char userIn[50];
printf("Enter filename: ");
scanf("%s", userIn);
graFile = fopen(userIn, "r");
int studentId, test1, test2, test3, test4;
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
fscanf(graFile, "%d%d%d%d%d%f", &studentId, &test1, &test2, &test3, &test4, &arr2[i][j]);
arr2[0][0] = studentId;
arr2[0][1] = test1;
arr2[0][2] = test2;
arr2[0][3] = test3;
arr2[0][4] = test4;
}
}
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
printf("%f", arr2[i][j]);
}
printf("\n");
}
fclose(graFile);
return;
}
我必须编写一个程序,要求用户输入文本文件的名称(包含成绩),然后将其加载到2D数组中。然后,我必须对成绩进行排序并取平均成绩。我从我的第一个功能开始,该功能是获取用户输入的文本文件名并将其加载到2D数组中。我还是C语言编程的新手,我很难理解2D数组。感谢您能提供的任何帮助。
答案 0 :(得分:0)
以下建议的代码:
puts()
stderr
printf()
的调用中正确使用格式字符串for
if
else
while
do...while
switch
case
,default
单个空白行,以提高可读性现在,建议的代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_FILENAME_LEN 50
void getName( int x, int y )
{
int arr2[x][y];
char userIn[ MAX_FILENAME_LEN ];
FILE* graFile;
printf("%s", "Enter filename: ");
if( scanf("%49s", userIn) != 1)
{
fprintf( stderr, "scanf failed to read file name\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
graFile = fopen(userIn, "r");
if( !graFile )
{
perror( "fopen failed" );
exit( EXIT_FAILURE );
}
// implied else, fopen successful
for(int i = 0; i < x; i++)
{
if( fscanf( graFile,
"%d%d%d%d%d",
&arr2[i][0],
&arr2[i][1],
&arr2[i][2],
&arr2[i][3],
&arr2[i][4] ) != 5 )
{
fclose( graFile );
fprintf( stderr, "fscanf failed to read row %d from the input file\n", i );
exit( EXIT_FAILURE );
}
}
fclose(graFile);
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
printf("%d", arr2[i][j]);
}
puts( "" );
}
}