чтение в текстовом файле для связанного списка при использовании C - PullRequest
2 голосов
/ 24 ноября 2010

У меня есть структура, которая называется student:

struct student{
   char*lastName;
   char*firstName;
   int age;
   float grade[3];
}

как мне читать в текстовом файле, который должен быть прочитан в массив студенческих записей.Возраст всех учащихся должен быть случайным образом составлен в диапазоне от 18 до 35. Каждый студент имеет 3 текстовых оценки от 0 до 100.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2010

Прежде всего, если я понимаю ваш вопрос, вы должны предоставить связанный список.Поскольку связанные списки сложнее, чем чтение файла, генерация чисел и т. Д., Я только дам вам подсказки об этом.

Если бы вам пришлось поместить ваших студентов в простой массив, это было бы легко,Например, простой студент myArray [100] сделает это.Это будет означать, что все ваши ученики будут храниться в одной и той же части памяти.Вот так: (A) (B) (C).А, В и С - трое учеников, которые находятся рядом друг с другом.Это не удобно, если у вас будет огромное количество студентов, так как вам нужно будет найти достаточно большую зону в памяти, чтобы заполнить все.Вот почему есть связанный список: так что вы можете поместить своих учеников повсюду в памяти.Например: (A) (некоторые другие данные) (B) (некоторые другие данные) (C).Там вам не нужно иметь большое, уникальное, свободное пространство в вашей памяти.

Но есть проблема: когда вы используете массив, очень легко найти ваши данные.Вам просто нужно знать начало массива, а затем вычислить количество нужных вам данных, начиная с первого элемента массива.Вот что это значит, когда вы делаете: например, myArray [4].

Поскольку вы собираетесь использовать связанный список, вы не можете рассчитать, где находятся данные, потому что, и это идея связанного списка, они могут быть где угодно.Вот почему список связан : вам нужно указать способ перехода от данных к данным.И вы собираетесь использовать лучшие друзья программистов на C: указатели.

Итак, вы должны улучшить свою структуру:

struct student{ 
   char* lastName; 
   char* firstName; 
   int age; 
   float grade[3]; 
   student* next
} 

И вам понадобится очень важная переменная: student * listStart.Это эквивалент переменной «массив», которую вы используете.Место, с которого вам нужно начинать, если вы хотите получить доступ к вашим данным.

Теперь, что вы должны сделать в основном:

  1. Прочитайте файл, где находятся ваши студентысохранено.
  2. Для каждого ученика используйте malloc (), чтобы выделить достаточно памяти для этого ученика (изучите, как работает malloc (), это крайне важно).
  3. Если это первый ученик,listStart указывает на этого ученика.
  4. Для этого вновь созданного ученика заполните все поля (имя, оценки и т. д.).Заполните «следующий» указатель предыдущего студента с адресом этого студента.«Следующим» указателем студента, которого вы создаете, должно быть «NULL», на случай, если это конец списка.

Хорошо, сначала это немного сбивает с толку.Но если вам удастся сделать это, вы узнаете что-то полезное, и мы не сделаем вашу домашнюю работу за вас.Удачи;

0 голосов
/ 24 ноября 2010

Хорошо, я мог бы помочь. Тем не менее, необходима дополнительная информация. Что содержит текстовый файл? Если вам нужны случайно сгенерированные возрасты ... это легко, просто используйте метод генератора случайных чисел (google) и определите его границы, каждый раз вызывая его через цикл, чтобы получить случайный возраст. Кроме того, сделайте это для оценок. Что касается массива, я почти уверен, что вы можете создать список вашей структуры (c # похож на List mylist = new List ();) Или вы можете создать массив вашей структуры.

Если вы используете текстовый файл, который содержит частичные данные (например, только имена и фамилии). Я бы прочитал в текстовом файле в цикле, присвоить имя и фамилию. Затем переберите длину массива / списка, который вы называете случайным числом для возраста и оценки каждый раз. Затем назначьте эту позицию в цикле каждой возрастной категории. Поэтому student [i] .age = * метод random gen вернул val.

0 голосов
/ 24 ноября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...