我正在使用C语言编写一个类的程序而且我被卡住了。我一直在研究各地(教科书,互联网,同学,课堂笔记),我似乎无法找到问题。以下是以下任务:
编写一个读取输入文件并创建已排序输出文件的函数。函数原型是void file_sort(char * infile,char * outfile)。该函数将文件名作为参数。输入文件包含学生信息,格式如下。第一行包含文件中的学生数。每个后续行包含有关一名学生的信息。每行包含三个字段,即学生ID,成绩和GPA,按空格分隔。学生ID是正整数。成绩是一个角色。 GPA是双重类型值。该功能按学生ID的升序对学生信息进行排序。已订购的学生信息将写入输出文件。输出文件的格式与输入文件的格式相同。该函数动态分配三个数组并将学生信息存储到数组中。三个阵列同时排序。已排序的数组信息将写入输出文件。当函数完成其工作时,将释放动态数组。不应使用结构。
只是几个笔记: (1)我用Java语言编程了大约3年。编程对我来说不一定是新的。然而,C语言。 (2)如果我没有正确提出我的问题,你当然可以这样说,但请体谅。毕竟,我仍然认为自己是“新手”。
这是我目前的代码。第一个块是我在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'
???
答案 0 :(得分:0)
我不确定确切的问题。
一个明显的问题出在else if (response == 9)
部分
char *input_file_name;
char *output_file_name;
是char指针。这些指针用于获取文件名。但是没有为此分配内存。
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数组。
char input_file_name[50];
char output_file_name[50];
答案 1 :(得分:-2)
我不知道,但也许你也可以这样做?
int i; for (i = 0; i <= number_students; i++, i--) {