如何使用数组指针打印结构构件?

时间:2020-01-20 18:32:51

标签: c arrays function pointers struct

到目前为止,我编写的代码没有库。基本上,我使用了stdio.h和stdlib.h。

typedef struct ID{
     char firstName[21];
     char lastName[21];
     char phoneNumber[11];
}ID;

ID PrintList(ID *ptr,int i){
     int l=1;
     printf(" #   First Name       Last Name       Phone Number\n");
     while(l<i+1)
     {
        printf(" %d.   %s",l,&ptr[l]);
        l++;
    }
} 

ID addNew(ID *ptr,int i){
    char fname[21],lname[21],phone[11];
    if(i<3)
     {  
        ID user;
        ptr[i] = user;
        printf("enter the first name:   ");
        scanf("%s",&fname);
        *ptr->firstName= fname;
        printf("enter the last name:    ");
        scanf("%s",&lname);
        *ptr->lastName = lname;
        printf("enter the phone number: "); 
        scanf("%s",&phone);
        *ptr->phoneNumber = phone;
    }
    else
    {
        printf("sorry but you have reach max capacity\n");  
    }
} 

int main(int argc, char *argv[]) {
    int answere,i=0;
    printf("******* WELCOME TO PHONEBOOK **********\n\n\n");
    printf("***************************************\n");
    printf("*                MENU                 *\n");
    printf("*                                     *\n");
    printf("* 1.Add New   2.Print list     3.Exit *\n\n");
    printf("***************************************\n\n");

    ID* ptr=(int*)malloc(21*sizeof(ID));
    do
    {
        printf("Please select (1, 2 or 3): ");
        scanf("%d",&answere);
        if(answere!=1 && answere!=2 && answere!=3)
        {
            printf("...Error... \ngive me a correct answere\n");
        }
        if(answere == 1)
        {
            i++;
            addNew(ptr,i);
        }
        else if(answere==2)
        {
            PrintList(ptr,i);
        }
    }while(answere!=3); 

    return 0;
}

所以正如我所说,我的问题是我无法打印该结构的成员,因为我需要使用指针数组来打印它们。我认为我没有写正确的东西,就像那只是printf中的一个小逻辑错误。 我唯一的障碍是需要在main中创建指针数组。

1 个答案:

答案 0 :(得分:0)

您似乎完全迷路了...

一些基本知识

您正在将指针/引用传递给数组的第一项(第一项的地址) 要获得该地址的价值(取消引用),您可以做两件事:

  • * ptr //但是我不建议在结构中使用它
  • ptr [0]

由于您使用的结构通常比较大,因此应该使用指针,因此存在所谓的“ arrow” 运算符,该运算符可用于访问结构指针的成员

  • ptr->名字

所以您的函数应如下所示:

    void PrintList(ID *ptr, int l)
    {
         int i;
         printf(" #   First Name       Last Name       Phone Number\n");
         for(i = 0; i < l; i++)
         {
            printf("%2d.   %s       %s       %s\n", 
i, ptr[i].firstName, ptr[i].firstName, ptr[i].phoneNumber);
        }
    }

我还建议使用'\ t'而不是空格来对齐列。

相关问题