#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%fn",b[i].name,b[i].id,b[i].age,b[i].inc) ;
}
return 0 ;
}
编译时的输出:
警告:格式 '%s' 需要类型为 'char' 的参数,但参数的类型为 'char ()[25]' [-Wformat=] scanf("%s%d%d%f">
,&b[i].name,&b[i].id,&b[i].age,&b[i].inc) ;
如何解决警告?
&b[i].name
是指向char
数组的指针(它是一个char (*)[25]
),但scanf
想要一个指向char
(char*
)的指针。
您需要传递指向数组第一个元素的指针。
你可以用&b[i].name[0]
显式地获得它,或者只用b[i].name
依赖隐式转换
无需&
b[i].name
,因为这已经分解为指向第 0 个元素的指针