[英]How to use array of pointers to print structure entities?
我用C編寫了一個名為ak
。 有一個指針數組s
,它存儲ak型數組p
的地址。 輸入值后,僅str
被打印。
如何使用指針數組同時顯示str
和id
?
設置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值。 屏幕截圖在這里:
關於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]->id
是int ,而不是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.