Как хранить элементы в 2D-массиве символов и печатать их (при чтении из файла)
Это довольно сложная проблема (по крайней мере, для меня), поэтому откровенно со мной, пока я ее объясняю.
Начальная задача состоит в том, чтобы прочитать данные из базы данных студентов, найти тип студента (например, европейский, международный, финансируемый и т. д.) и отсортировать в алфавитном порядке по имени.
Для начала я прочитал из каждого отдельного файла строку за строкой с помощью fgets() и проанализировал каждую строку с помощью sscanf (), чтобы сохранить фамилию и имя студентов в указанных переменных.
Наконец, я использовал fprintf (), чтобы записать каждый файл в один файл, который содержит все имена студентов в табличном формате.
Пока все достаточно просто.
Теперь начинается самое сложное.
Чтобы сохранить все имена из Объединенного файла, я использовал 2D-массив символов. Это 2D, потому что мне нужно хранить каждый номер строки и #define BUFFER, чтобы указать, сколько символов в строке.
Теперь мне нужно передать 2D-массив функции для поиска студента и сортировки списка. Я дал ему попробовать, но я могу заставить его отображать только одно имя или случайные символы.
Ниже приведены фрагменты моего кода до сих пор...
Что я уже пробовал:
void parse_file_and_sort(void) { FILE *fp = fopen("Combined.dat", "rb"); // 2D array static char student[SIZE][BUFFER]; unsigned short total; unsigned short i = 0; char input; char search_key[KEY_ID]; if (fp != NULL) { while((fgets(student[i], BUFFER, fp)) != NULL) { // remove newline if (student[i][strlen(student[i] - 1)] == '\n') { student[i][(strlen(student[i]) - 1)] = '\0'; i++; } } // end while total = i; for(i = 0; i < total; i++) { // remove headings if (i == 0) { student[i][i] = '\0'; } } // end for // close file stream fclose(fp); // passing array to function which will search for a keyword linear_search(student); } void linear_search(char student[][BUFFER]) { unsigned short i; for(i = 0; i < SIZE; i++) { printf("%-2u | %s\n", i, student[i]); } }