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