2010-11-24 2 views
2

У меня есть студент-структуру под названием, как например:чтение в текстовом файле для связанного списка, используя C

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

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

+3

См. Http://meta.stackexchange.com/questions/10811/homework-on-stackoverflow для вопросов, связанных с домашним заданием. – gimpf 2010-11-24 15:24:16

+4

@gimpf: Очевидно, что вы не читали свою собственную ссылку. «Не редактируйте вопрос, чтобы добавить тег домашней работы». – JeremyP 2010-11-24 17:10:51

+0

... Point принят. – gimpf 2010-11-26 14:48:09

ответ

2

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

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

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

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

Таким образом, вы должны улучшить свой-структуру:

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

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

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

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

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

0

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

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

Смежные вопросы