Linux C Programmeer tutorial deel 27 – Array van structuren
In deze doorlopende C programmeer-tutorial serie hebben we het de laatste tijd over structuren. We hebben de basisprincipes van structuren al behandeld, hoe structuren met functies gebruikt kunnen worden, en ook het concept van verwijzingen naar structuren.
Nu, verder bouwend op het concept van structuren, bespreken we hoe je een array van structuren kunt maken aan de hand van eenvoudig te begrijpen voorbeelden.
Reeks van structuren in de programmeertaal C
Laten we dus beginnen. Hier is een eenvoudige structuur met de naam ‘student_details’ die, zoals je ziet, gebruikt kan worden om het rolnummer en de cijfers van leerlingen op te slaan:
struct student_details{
int roll_no;
int marks;
};
Stel nu dat er in totaal 5 leerlingen zijn, en de bedoeling is om invoer van de gebruiker over deze leerlinggegevens te accepteren. Dan is een manier om hier code voor te schrijven:
#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;
...
...
...
Of kan iets als dit zijn:
#include <stdio.h>
struct student_details{
int roll_no;
int marks;
};
int main()
{
struct student_details obj1, obj2, obj3, obj4, obj5;
...
...
...
Nu kan het geen kwaad als je de eerder genoemde benaderingen volgt. De enige zorg die opkomt is of deze benaderingen wel schaalbaar zijn. Ik bedoel, wat als je in plaats van 5, zeg, 50 objecten of instanties moet maken. In dat geval zal het volgen van deze benaderingen het schrijven en onderhouden van code beslist veel ingewikkelder maken.
Is er dus een oplossing? Wel, ja. Een betere manier is om een array van de structuur ‘student_details’ te maken. Hier zie je hoe:
struct student_details obj[5];
Hieronder volgt een compleet programma dat gebruik maakt van deze structuur-array:
#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;
}
Hier gebruikten we dus de ‘student_details’ structuur die we eerder bespraken, en maakten een array van 5 objecten van het type. Dan vraagt het programma de gebruiker een voor een het rolnummer en de cijfers van de leerlingen in te voeren. De gegevens van elke leerling worden opgeslagen in elke instantie van de structuur-array. En tenslotte wordt de opgeslagen info als uitvoer naar de gebruiker teruggedrukt.
Hier is de uitvoer in mijn geval:
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
Met deze aanpak kun je je programma gemakkelijk schalen. Dit betekent dat, zelfs als er 50 leerlingen zijn van wie de informatie moet worden opgeslagen en afgedrukt, je alleen de grootte van array tot 50 hoeft te vergroten, en maar heel weinig bijbehorende veranderingen hoeft aan te brengen. De rest van de code blijft hetzelfde. Dus, in een notendop, je kunt gemakkelijk met schaalbaarheid omgaan als je arrays gebruikt, in vergelijking met de benaderingen die we in het begin van de leerprogramma’s bespraken.
Conclusie
In deze zelfstudie hebben we het basisconcept van arrays van structuren behandeld. Aan de hand van gemakkelijk te begrijpen voorbeelden bespraken we waarom een array van structuren belangrijk is, wanneer je ze gebruikt, en hoe je ze gebruikt. Je wordt aangeraden de voorbeelden uit deze leerprogramma’s op je machine uit te proberen. En als je twijfels of vragen hebt, laat dan hieronder een reactie achter.