gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:40:14 25 4
gpt4 key购买 nike

我正在为一个类编写一个 C 语言程序,但我陷入了困境。我到处研究(课本、网络、同学、类笔记),似乎找不到问题所在。以下是作业:

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

请注意几点:(1) 我使用 Java 语言编程已经大约 3 年了。编程对我来说并不一定是新鲜事。然而C语言却是。(2)如果我没有恰本地提出我的问题,你当然可以这么说,但请体谅。毕竟我还是觉得自己是个“新手”。

这是我当前的代码。第一个 block 是我在 main 中调用函数 file_sort() 。它是菜单驱动的(为用户提供 1-11 个选项。这是选项 9)。

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

这是在 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);
}

如果我需要包含任何信息来帮助更好地回答这个问题,请告诉我。非常感谢。

排序似乎不起作用。下面我发布了需要与最终输出一起排序的文件。

待排序(第一个数字表示学生人数):

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'

???

最佳答案

我不确定具体的问题。

一个明显的问题位于 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");
}

动态分配或将其设置为字符数组。

char input_file_name[50];
char output_file_name[50];

关于c - 使用数组读取和写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com