如何使用用户输入打开文本文件,然后将其加载到2D数组中?

时间:2018-11-10 00:40:00

标签: c arrays file

这就是我的文本文件中的内容。

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数组。感谢您能提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

以下建议的代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 为预期的输入正确地“类型”变量
  4. 正确检查错误
  5. 在适当的时候使用puts()
  6. 正确地将错误消息输出到stderr
  7. 避免不必要的变量声明和数据复制
  8. 一致地缩进代码
  9. 在适当情况下使用水平间距以提高可读性
  10. 在对printf()的调用中正确使用格式字符串
  11. 分隔代码块:for if else while do...while switch casedefault单个空白行,以提高可读性

现在,建议的代码:

#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( "" );
    }
}