实际上,用scanf对通过指针引用的结构体变量赋值与常规的scanf用法没有差异。举例如下:
#include
/* 声明结构体 myStruct */
struct myStruct
{
int x;
char s[100];
};
void main()
{
myStruct ms;
/*结构体指针*/
myStruct *p = &ms;
/**
* scanf参数列表需要各个变量的地址。下面的语句中:
* p->x通过指针取出了成员变量x;&(p->x)取出了该成员变量的地址
* p->s通过指针取出了字符数组成员变量s;而p->s就是字符数组的首地址
**/
scanf("%d,%s", &(p->x), p->s);
/*输出*/
printf("%d, %s\n", p->x, p->s);
}
ga是指针变量,没有给它分配内存,可以用malloc函数
#include
#define N 6
#include
#include
typedef struct
{
int x[N],y[N];
}graph;
void main()
{
int i=1;
graph *ga;
ga = ((graph *)malloc(sizeof(graph))); //给它分配一个 graph 大小的空间
scanf("%d %d",&(ga->x[i]),&(ga->y[i]));
printf("%d %d\n",ga->x[i],ga->y[i]);
}
没有错误,那 是警告,local variable 'ga' used without having been initialized 是说你没有给 ga初始化,如果你没有给指针分配空间的话,输入的值就不知道放在那里了,所以输入的时候,就给提示你XX.exe 已经停止工作了……
你需要定义结构体类型的变量啊
例如:
graph a, *ga;
ga = &a; //ga指向a
scanf(.....,&(ga->x[i]...);
这样才是可以的。
定义ga不能是指针类型的,指针类型是指可以存该类型的地址,在这没有意义的