Поиск по сайту:

Учебник по программированию на C для Linux, часть 27 — Массив структур


На этой странице

  1. Массив структур в языке программирования C
  2. Заключение

В этой продолжающейся серии руководств по программированию на C мы недавно обсуждали структуры. Мы уже рассмотрели основы структур, как структуры могут использоваться с функциями, а также концепцию указателей на структуры.

Теперь, расширяя концепцию структур, обсудим, как создать массив структур, используя простые для понимания примеры.

Массив структур в языке программирования C

Итак, давайте начнем. Вот простая структура с именем student_details, которую, как вы видите, можно использовать для хранения номеров и оценок учеников:

struct student_details{
int roll_no;
int marks;
};

Теперь предположим, что всего есть 5 студентов, и требуется принять данные от пользователя об этих данных студента. Тогда один из способов написать код для этого:

#include <stdio.h>

struct student_details{
int roll_no;
int marks;
};

int main()
{
struct student_details obj1;
struct student_details obj2;
struct student_details obj3;
struct student_details obj4;
struct student_details obj5;
...
...
...

Или может быть что-то вроде этого:

#include <stdio.h>

struct student_details{
int roll_no;
int marks;
};

int main()
{
struct student_details obj1, obj2, obj3, obj4, obj5;
...
...
...

Теперь нет никакого вреда, если вы будете следовать вышеупомянутым подходам. Единственная проблема, которая возникает, заключается в том, являются ли эти подходы масштабируемыми. Я имею в виду, что если вместо 5 вам нужно создать, скажем, 50 объектов или экземпляров. В этом случае использование этих подходов определенно усложнит написание и обслуживание кода.

Так есть ли решение? Ну да. Лучший способ — создать массив структуры student_details. Вот как:

struct student_details obj[5];

Ниже приведена полная программа, использующая этот массив структур:

#include <stdio.h>

struct student_details{
int roll_no;
int marks;
};

int main()
{
struct student_details obj[5];
int i;

for(i=0;i<5;i++)
{
printf("\n Enter roll number: ");
scanf("%d", &(obj[i].roll_no));
printf("\n Enter marks (out of 100): ");
scanf("%d", &(obj[i].marks));
}

printf("\n Here's the data you've entered::");

for(i=0;i<5;i++)
{
printf("\n Roll number: %d", (obj[i].roll_no));
printf("-- Marks: %d", (obj[i].marks));
}


return 0;
}

Итак, здесь мы использовали структуру student_details, которую обсуждали ранее, и создали массив из 5 объектов этого типа. Затем программа просит пользователя ввести номер студенческого списка и ставит отметки одну за другой. Информация, соответствующая каждому студенту, хранится в каждом экземпляре массива структур. И, наконец, сохраненная информация выводится обратно пользователю.

Вот результат в моем случае:

Enter roll number: 1 

Enter marks (out of 100): 67

Enter roll number: 2

Enter marks (out of 100): 73

Enter roll number: 3

Enter marks (out of 100): 56

Enter roll number: 4

Enter marks (out of 100): 52

Enter roll number: 5

Enter marks (out of 100): 85

Here's the data you've entered::
Roll number: 1-- Marks: 67
Roll number: 2-- Marks: 73
Roll number: 3-- Marks: 56
Roll number: 4-- Marks: 52
Roll number: 5-- Marks: 85

Используя этот подход, вы можете легко масштабировать свою программу. Это означает, что даже если есть 50 студентов, чью информацию необходимо сохранить и распечатать, вам просто нужно увеличить размер массива до 50 и внести очень мало связанных изменений. Остальной код остается прежним. Итак, в двух словах, вы можете легко справиться с масштабируемостью при использовании массивов по сравнению с подходами, которые мы обсуждали в начале руководства.

Заключение

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