#c #structure
Вопрос:
В C я использую цикл for для ввода элементов структуры и успешно ввожу их. Тем не менее, после того, как я зациклился на вводе, я хочу получить доступ ко всем элементам, которые я создал с помощью функции malloc с самого начала, чтобы распечатать элементы. Как я могу выполнить цикл из первого элемента выделенной памяти после использования цикла для создания элементов структуры?
#include <stdio.h>
#include <stdlib.h>
struct Ogrenci{
char isim[50];
char soyisim[50];
int numara;
float vizeNotu;
};
void main(){
struct Ogrenci *geciciOgrenci;
float ortalamaNot = 30;
int i;
char isim[50];
char soyisim[50];
int numara;
float vizeNot;
for(i=0; i<5; i ){
geciciOgrenci = malloc(sizeof(struct Ogrenci));
printf("Ismi girin: ");
scanf("%s",isim);
printf("Soyisim girin: ");
scanf("%s",soyisim);
strcpy(geciciOgrenci->isim,isim);
}
}
Ответ №1:
Ваш код выделяет память и сохраняет в ней свой адрес geciciOgrenci
. Это работает для первого элемента, однако начиная со второго элемента новый выделенный адрес перезаписывает предыдущий. Внесите следующие изменения.
#include <stdio.h>
#include <stdlib.h>
struct Ogrenci{
char isim[50];
char soyisim[50];
int numara;
float vizeNotu;
};
void main(){
struct Ogrenci *geciciOgrenci[5]; //declare array of pointers
float ortalamaNot = 30;
int i;
char isim[50];
char soyisim[50];
int numara;
float vizeNot;
for(i=0; i<5; i ){
geciciOgrenci[i] = malloc(sizeof(struct Ogrenci)); // store the address in the ith element
printf("Ismi girin: ");
scanf("%s",isim);
printf("Soyisim girin: ");
scanf("%s",soyisim);
strcpy(geciciOgrenci[i]->isim,isim); // refer to the ith element
}
for(i=0; i<5; i ){
printf("%s n", geciciOgrenci[i]->isim); // access the elements
}
}