求解!关于结构体的一个问题
以下是一段C语言代码,编译的都没问题,执行后却发现了一个问题!(为调试发现问题做过一些小改动了)#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define max_num 21
typedef struct arcnode
{ int adjvex; //该弧所指向的顶点的位置
struct arcnode *nextarc; //指向下一条弧的指针
char info[10]; //存储与弧有关的信息
}arcnode; //定义弧
typedef struct
{ //Gph->graph[i+1].firstarc->adjvex
arcnode *firstarc; //指向第一条依附该顶点的弧的指针
char info[10]; //顶点信息
}Gnode; //定义图的结点
typedef struct
{
Gnode graph[max_num]; //注意第一个元素graph[0]不用
int vexnum,arcnum; //图的当前顶点数和弧数
int kind; //图的种类标志
}Graph; //图
int change(char *sz) //字符串转为整形数据
{
int i=0,n=0 ,wq=1,sum=0;
char *p=NULL;
p=sz;
while(*sz) { i++; sz++; }
n=i;
while(*p)
{ i=n; wq=1;
while(i>1) { wq=wq*10; i--; }
n--;
sum=sum+wq*(*p-48);
p++;
}
return sum;
}
void createGraph(Graph *Gph) //构造图
{
int i = 0, k = 0; //i,k用于下面计数
char data[20] = {0},temp[10] = {0}; //储存输入数据的临时空间
char *p,*q; //用以对输入数据的处理
arcnode *Tarcnode; //指向弧的指针
printf(" 现在开始构建图,此处默认构建有向无权图。请先给图由1开始做好标号,统计顶点数,\n");
printf("再按照提示构建图。\n");
printf(" 输入图的顶点数:");
scanf("%d", &Gph->vexnum);
flushall();
if(Gph->vexnum>max_num-1)
{
printf("超过最大顶点数,请调整程序\n");
exit(0);
}
printf(" 依次输入各顶点的信息,以及以此顶点为弧尾的弧所指向的其它顶点的位置,\n");
printf("中间用空格隔开。\n");
for(i = 0; i < Gph->vexnum; i++) //开始构造图
{
printf("输入第%d个顶点信息:", i+1);
gets(data); //用字符串存储输入的数据
p = data;
q = temp;
while(*p)
{
if(*p == ' ') //跳过空格符
p++;
while(*p != ' ') //读取顶点信息
{
*q = *p;
p++;
q++;
}
*q = 0;
strcpy(Gph->graph[i+1].info, temp);
k = 1; //k用于计数
Gph->arcnum = 0;
while(*p) //读取邻结顶点位置
{
if(*p == ' ')
p++;
q = temp;
while(*p != ' ' && *p)
{
*q = *p;
p++;
q++;
}
*q = 0;
printf("*************************************\n");
Gph->graph[i+1].firstarc->adjvex =0;
printf("*************************************\n");
if(k == 1) //读取第一个邻结顶点位置
{
{
int m=0;
m=change(temp);
printf("%d\n",m);
getch();
}
Gph->graph[i+1].firstarc->adjvex = change(temp);
Gph->arcnum++; //弧数增加一
Gph->graph[i+1].firstarc->nextarc = NULL;
Tarcnode = Gph->graph[i+1].firstarc->nextarc;
k++;
}
else
{
Tarcnode->adjvex = change(temp);
Gph->arcnum++;
Tarcnode->nextarc = NULL;
Tarcnode = Tarcnode->nextarc;
}
}
}
}
}
main()
{
Graph Mgraph;
createGraph(&Mgraph);
}
问题时,当程序执行到以下这个地方时,
printf("*************************************\n");
Gph->graph[i+1].firstarc->adjvex =0;
printf("*************************************\n");
这条语句Gph->graph[i+1].firstarc->adjvex =0;执行不下去,Gph->graph[i+1].firstarc->adjvex无法被赋整数值