Я работаю над программой на языке C для класса, и я застрял. Я изучаю всюду (учебники, Интернет, одноклассники, заметки класса), и я не могу найти проблему. Вот следующее назначение:Чтение и запись в текстовые файлы с использованием массивов
Напишите функцию, которая считывает входной файл и создает отсортированный выходной файл. Прототипом функции является void file_sort (char * infile, char * outfile). Функция принимает имена файлов в качестве параметров. Входной файл содержит информацию о студенте и имеет следующий формат. Первая строка содержит количество студентов в файле. Каждая последующая строка содержит информацию об одном ученике. Каждая строка содержит три поля: идентификатор студента, класс и GPA в этом порядке, разделенные пробелами. Идентификатор студента - положительное целое число. Класс - персонаж. GPA - это значение двойного типа. Функция сортирует информацию о студенте в порядке возрастания идентификатора студента. Информация о заказе студента записывается в выходной файл. Выходной файл имеет тот же формат, что и входной файл. Функция динамически распределяет три массива и сохраняет информацию о студенте в массивы. Одновременно сортируются три массива. Информация отсортированного массива записывается в выходной файл. Динамические массивы освобождаются, когда функция завершает свою работу. Структуры не должны использоваться.
Всего несколько нот: (1) Я программировал на языке Java примерно 3 года. Программирование для меня не обязательно нова. Однако язык C. (2) Если я не представил надлежащим образом свой вопрос, вы можете, конечно, сказать это, но, пожалуйста, будьте внимательны. В конце концов, я все еще считаю себя «новичком».
Вот мой текущий код. Первый блок - это мое вызов функции file_sort() в main. Он управляется меню (для пользователя доступны 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");
}
Это функция, объявленная за пределами основного.
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'
???
Уточните вопрос и четко определите свою проблему ??? – Jeyaram
Что сказал @Jeyaram. Я понятия не имею, каков ваш вопрос. –
Уточнение вопроса: Когда я скомпилирую эту программу (в CodeBlocks с использованием компилятора GCC), я получаю 0 ошибок. Однако после того, как я введу какой файл, который я хочу прочитать, и запись в программу, похоже, сбой. Я получаю сообщение, в котором говорится, что «Assignment.exe перестала работать». Windows ищет решение проблемы, но никогда не находит ее. Как только программа завершается, ни одно сообщение об ошибке не отображается. Проясняет ли это? Я не могу поверить, что забыл на самом деле задать свой вопрос ... –