#include<stdio.h>
struct employee
{
char name[25] ;
int id ;
int age ;
float inc ;
} b[3] ;
int main()
{
int i ;
for(i = 0 ; i < 3 ; i++)
{
printf("Enter name , id , age , inc of employee %d :- ",i+1) ;
scanf("%s%d%d%f",&b[i].name,&b[i].id,&b[i].age,&b[i].inc) ;
}
printf("\n") ;
for(i = 0 ; i < 3 ; i++)
{
printf("%s%d%d%f\n",b[i].name,b[i].id,b[i].age,b[i].inc) ;
}
return 0 ;
}
编译时的输出:
警告:格式'%s'需要'char '类型的参数,但参数的类型为'char()[25]'[ - Wformat =] scanf(“%s%d%d%f”,&amp; b [i] .name,&amp; b [i] .id,&amp; b [i] .age,&amp; b [i] .inc);
如何修复警告?
答案 0 :(得分:3)
&b[i].name
是指向char
数组的指针(&#39; sa char (*)[25]
),但scanf
想要指向char
的指针(一个char*
)。
您需要将指针传递给数组的第一个元素。
您可以使用&b[i].name[0]
明确地获取该内容,也可以仅使用b[i].name
答案 1 :(得分:2)
&
上不需要b[i].name
,因为这已经分解为指向第0个元素的指针