首页 > 解决方案 > 循环后如何访问C中结构的第一个元素

问题描述

在 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);   
    }
    
}

标签: cstructure

解决方案


您的代码分配内存,并将其地址存储在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
    }
    
}

推荐阅读