Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用数组读取和写入文本文件_C_Arrays_Sorting_Text Files - Fatal编程技术网

C 使用数组读取和写入文本文件

C 使用数组读取和写入文本文件,c,arrays,sorting,text-files,C,Arrays,Sorting,Text Files,我正在为一个班级编写一个C语言程序,我被卡住了。我到处都在研究(课本、网络、同学、课堂笔记),但似乎找不到问题。以下是作业: 编写一个函数,用于读取输入文件并创建已排序的输出文件。函数原型是void file_sort(char*infile,char*outfile)。该函数将文件名作为参数。输入文件包含学生信息,格式如下。第一行包含文件中的学生人数。随后的每一行都包含一个学生的信息。每行包含三个字段,即学生ID、成绩和GPA,按空格分隔。学生ID是一个正整数。等级是一个字符。GPA是一个双重

我正在为一个班级编写一个C语言程序,我被卡住了。我到处都在研究(课本、网络、同学、课堂笔记),但似乎找不到问题。以下是作业:

编写一个函数,用于读取输入文件并创建已排序的输出文件。函数原型是void file_sort(char*infile,char*outfile)。该函数将文件名作为参数。输入文件包含学生信息,格式如下。第一行包含文件中的学生人数。随后的每一行都包含一个学生的信息。每行包含三个字段,即学生ID、成绩和GPA,按空格分隔。学生ID是一个正整数。等级是一个字符。GPA是一个双重类型值。该函数按学生ID的升序对学生信息进行排序。排序后的学生信息将写入输出文件。输出文件的格式与输入文件相同。该函数动态分配三个数组,并将学生信息存储到数组中。这三个数组同时排序。排序后的数组信息将写入输出文件。当函数完成其工作时,将释放动态数组。不应使用结构

请注意: (1) 我已经用Java语言编程大约3年了。编程对我来说并不一定是新鲜事。然而,C语言是。 (2) 如果我没有恰当地提出我的问题,你当然可以这样说,但请考虑周到。毕竟,我仍然认为自己是一个“新手”。p> 这是我目前的代码。第一个块是我在main中调用函数file_sort()。它是菜单驱动的(用户有1-11个选项,这是选项9)

这里是在main之外声明的函数

void file_sort(char *infile, char *outfile)
{
    FILE *input;
    FILE *output;
    input = fopen(infile, "r");
    output = fopen(outfile, "w");
    int size = 100;
    int *id_array;
    id_array = (int*)malloc(size*sizeof(int));
    char *grade_array;
    grade_array = (char*)malloc(size*sizeof(char));
    double *gpa_array;
    gpa_array = (double*)malloc(size*sizeof(double));
    char grade;
    int id;
    double gpa;
    int number_students, j;
    if (input == NULL)
    {
        printf("File could not be opened\n");
    }
    fscanf(input, "%d", &number_students);
    while ((fscanf(input,"%d %c %lf", &id, &grade, &gpa)) == 3)
    {
        j = number_students;
        while((j >= 0) && (id_array[j] > id))
        {
            if (id_array[0] == 0)
            {
                id_array[0] = id;
                break;
            }
            id_array[j + 1] = id_array[j];
            j--;
        }
        if (j < 0)
        {
            j = 0;
        }
        id_array[j] = id;
        gpa_array[j] = gpa;
        grade_array[j] = grade;
    }

    int i;
    for (i = 0; i <= number_students; i++)
    {
        fprintf(output, "%d %c %lf\n", id_array[i], grade_array[i], gpa_array[i]);
    }
    free(id_array);
    free(grade_array);
    free(gpa_array);
    fclose(input);
    fclose(output);
}
运行后的“已排序”文件:

1029 C 1.700000
8391 B 2.900000
9287 £ 0.000000
9287   0.000000
10696720 ¸ 0.000000
10696720  0.000000'

我不确定确切的问题是什么

一个可见问题出现在
else if(response==9)
部分

char *input_file_name;
char *output_file_name;
是字符指针。这些指针用于获取文件名。但没有为此分配内存

else if (response == 9)
    {
        char *input_file_name; <------
        char *output_file_name;
        printf("Enter input file name: "); 
        scanf("%s", input_file_name);<--------------
        printf("Enter output file name: ");
        scanf("%s", output_file_name);<--------------
        file_sort(input_file_name, output_file_name);
        printf("File sorted and rewritten\n");
    }

我不知道,但也许你也能做到

int i;
对于(i=0;我可以缩短你的问题并清楚地说明你的问题吗???Jeyaram说了什么。我不知道你的问题是什么。问题澄清:当我编译这个程序时(使用GCC编译器在代码块中),我收到0个错误。但是,在我输入要从中读取和写入的文件后,程序似乎崩溃。我收到一条消息说“Assignment.exe已停止工作”.Windows正在寻找问题的解决方案,但从未找到解决方案。一旦程序终止,任何地方都不会显示错误消息。这说明问题了吗?我真不敢相信我居然忘了问我的问题…
,而((j>=0)和&(id\u array[j]>id))
id\u array[j]
正在与not initialize一起使用。哇,我完全没有想到要这样做。一旦我实施了您的建议,文件被读取,并使用新数据创建了一个新文件。但是,排序操作不正确。我将在下一步查看此操作,因为我可能会找到该错误。非常感谢您的帮助。排序似乎不正确正在工作。下面我发布了需要与最终输出一起排序的文件。要排序(第一个数字声明学生人数):'5 6029 A 3.5 3920 B 2.3 9287 A 3.1 1029 C 1.7 8391 B 2.9'“排序”运行后的文件:“1029 C 1.700000 8391 B 2.900000 9287£0.000000 9287 0.000000 10696720¸0.000000 10696720 0.000000”???
char *input_file_name;
char *output_file_name;
else if (response == 9)
    {
        char *input_file_name; <------
        char *output_file_name;
        printf("Enter input file name: "); 
        scanf("%s", input_file_name);<--------------
        printf("Enter output file name: ");
        scanf("%s", output_file_name);<--------------
        file_sort(input_file_name, output_file_name);
        printf("File sorted and rewritten\n");
    }
char input_file_name[50];
char output_file_name[50];