结构体类型的指针引用成员变量,给成员变量用scanf怎么赋值?

结构体类型的指针引用成员变量,给成员变量用scanf怎么赋值?
#define n 6
#include<math.h>
#include<stdio.h>
typedef struct{
int x[n],y[n];
}graph;
void main()
{int i=1;
graph *ga;
scanf("%d,%d",&(ga->x[i]),&(ga->y[i]));
}
错在哪,怎么改,说下为什么吧
运行出错了!

实际上,用scanf对通过指针引用的结构体变量赋值与常规的scanf用法没有差异。举例如下:

#include <stdio.h>

/* 声明结构体 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);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-24
ga是指针变量,没有给它分配内存,可以用malloc函数
第2个回答  推荐于2018-11-14
#include <malloc.h> //加上头文件
#define N 6
#include<math.h>
#include<stdio.h>
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 已经停止工作了……本回答被提问者和网友采纳
第3个回答  2011-03-24
你需要定义结构体类型的变量啊
例如:
graph a, *ga;
ga = &a; //ga指向a
scanf(.....,&(ga->x[i]...);
这样才是可以的。
第4个回答  2011-03-24
定义ga不能是指针类型的,指针类型是指可以存该类型的地址,在这没有意义的
相似回答