簡體   English   中英

如何使用指針數組打印結構實體?

[英]How to use array of pointers to print structure entities?

我用C編寫了一個名為ak 有一個指針數組s ,它存儲ak型數組p的地址。 輸入值后,僅str被打印。

如何使用指針數組同時顯示strid

設置1:

#include<stdio.h>
typedef struct
{
    char str[10];
    int id;
}ak;

int main()
{   
    printf("Hey\n"); 
    int i;
    ak *s[5],p[5];
    for(i=0;i<5;i++)
    {
        s[i]=&p[i];
        printf("Input string:");
        scanf("%s",&p[i].str);
        printf("Input id:");
        scanf("%d",&p[i].id);
    }    
    i=0;
    while(i<5)
    {
        printf("%s\n",s[i].id);
        ++i;
    } 
    return 0;   
}

第2組:

#include<stdio.h>
typedef struct
{
    char str[10];
    int id;
}ak;

int main()
{  
    printf("Hey\n"); 
    int i;
    ak *s[5],p[5];
    for(i=0;i<5;i++)
    {
         s[i]=&p[i];
         printf("Input string:");
         scanf("%s",&p[i].str);
         printf("Input id:");
         scanf("%d",&p[i].id);
    }    
    i=0;
    while(i<5)
    {
         printf("%s\n",s[i]);
         ++i;
    }
    return 0;    
}

所以當我嘗試set1代碼時,它給了我錯誤提示:

C:\CPP\c\Prototypes>gcc -o ct structure.c
structure.c: In function 'main':
structure.c:22:32: error: request for member 'id' in something not a structure or union

       printf("%s\n",*s[i].id);
                          ^ 

屏幕截圖在這里:

https://imageshack.com/a/img921/3084/j1rHig.png

當我嘗試set2代碼時,它僅顯示str值。 屏幕截圖在這里:

https://imageshack.com/a/img922/614/JHSGZ9.png

關於set1和您的printf("%s\\n",*s[i].id);

*s[i].id等效於*(s[i].id) ,而不是您*(s[i].id) (*s[i]).id 由於s[i]的類型為ak * ,因此無法通過s[i].id獲得其字段ID

您可以編寫(*s[i]).id但更易讀的方法是使用s[i]->id

您的printf還有另一個問題,格式不能為"%s"因為s[i]->idint ,而不是char *


關於set2

您要做printf("%s\\n",s[i]); ,您會感到驚訝,因為僅打印了字符串您如何期望打印出字符串 int?

您請求打印一個字符串(格式為%s ),但s[i]不是字符串。 偶然地,結構以字段str作為字符串開始,因此可以編寫它,但這不是正確的方法。

您必須顯式打印每個屬性,例如執行printf("%s %d\\n",s[i]->str, s[i]->id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM