据我所知,%d需要一个int值。我不明白为什么gcc编译器会说它期望int *。
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
struct student
{
int rn, m[5];
char nm[25];
};
int main()
{
struct student* s[5];
struct student **q=s;
int i = 0;
printf("Enter data");
for(i=0;i<5;i++)
{
printf("\nStudent %d:\n",i+1);
printf("Roll number: ");
scanf("%d",(s[i])->rn);
printf("\n%d",s[i]->rn);
}
}
这是警告:
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d",(s[i])->rn);
答案 0 :(得分:2)
scanf将值读入int,它将指向要读入的变量的指针。
scanf("%d",&((s[i])->rn));
答案 1 :(得分:0)
printf
为int
获取%d
,但scanf
获取int
(int *
)的地址,以便它可以存储转换后的价值。
答案 2 :(得分:0)
RTFM会有所帮助。 scanf
和相关函数(sscanf
等)总是需要它们读取值的变量的指针。 scanf documentation