| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:scanf 出错,求帮忙解决
只看楼主 加入收藏
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:5 
scanf 出错,求帮忙解决
程序代码:
尝试用fflush(stdin),getchar(),还是不行,应该不是输入缓冲区的问题;
但是由于该句语句执行通不过没法用printf("%d",scanf("%d",&g->adj_list[i].vex)),






printf("输入图的顶点数,边数,和图的类型\n");
    scanf("%d%d%d",&(g->vex_num),&(g->arc_num),&(g->kind));
    getchar();
    printf("  %d  %d  %d\n",g->vex_num,g->arc_num,g->kind);
   
    for(i=0;i<g->vex_num;i++)
    {
        printf("输入图的顶点值\n");
        scanf("%d",&g->adj_list[i].vex);//...................................此处出错
        getchar();
        printf("  %d  \n",g->adj_list[i].vex);
        g->adj_list[i].first_arc=NULL;
搜索更多相关主题的帖子: 缓冲区 
2014-11-16 14:40
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 楼主 风车转风车 89
这是源程序
。。。。。。。。。。。。。。。。。。。。。。。。。。。
程序代码:
#include<stdio.h>
#include<stdlib.h>


#define MAX_VEX_NUM 20

typedef struct arc_node
{
    int adjvex;
    struct arc_node *next_arc;
    int arc_infor;
}arc_node;
typedef struct vex_node
{
    int vex;
    arc_node *first_arc;
}vex_node;
typedef struct graph
{
    int arc_num,vex_num,vex[MAX_VEX_NUM];
    int kind;//kind为0为无向图,1为有向图
    vex_node *adj_list;
}Graph;


//.................................................创建一个图
int locate_graph(Graph *g,int vex)
{
    int i;
    for(i=0;i<g->vex_num;i++)
        if(g->adj_list[i].vex==vex)
            return i;   
}//找到定点vex说在邻接矩阵的位置

void creat_graph(Graph *g)//采用临街表寸出土的信息
{
    int i,j,k,vex1,vex2;arc_node *s;
    printf("输入图的顶点数,边数,和图的类型\n");
    scanf("%d%d%d",&(g->vex_num),&(g->arc_num),&(g->kind));
    getchar();
    printf("  %d  %d  %d\n",g->vex_num,g->arc_num,g->kind);
   
    for(i=0;i<g->vex_num;i++)
    {
        printf("输入图的顶点值\n");
        scanf("%d",&g->adj_list[i].vex);
        getchar();
        printf("  %d  \n",g->adj_list[i].vex);
        g->adj_list[i].first_arc=NULL;
    }//初始化邻接矩阵
    for(k=0;k<g->arc_num;k++)
    {
        if(g->kind==0)
        {
            printf("输入起始顶点vex1和终点vex2的值\n");
            scanf("%d%d",&vex1,&vex2);
            getchar();
            i=locate_graph(g,vex1);
            j=locate_graph(g,vex2);
            s=(arc_node*)malloc(sizeof(arc_node));
            s->adjvex=vex2;
            s->next_arc=g->adj_list[i].first_arc;
            g->adj_list[i].first_arc=s;
            s=(arc_node*)malloc(sizeof(arc_node));
            s->adjvex=vex1;//边连接的另一定点
            s->next_arc=g->adj_list[j].first_arc;//由此可知先输入的边在邻接表的后面位置
            g->adj_list[j].first_arc=s;
        }
        else             //  当为有向图时
        {
            printf("输入起始顶点vex1和终点vex2的值\n");
            scanf("%d%d",&vex1,&vex2);
            getchar();
            i=locate_graph(g,vex1);
            s=(arc_node*)malloc(sizeof(arc_node));
            s->adjvex=vex2;
            s->next_arc=g->adj_list[i].first_arc;
            g->adj_list[i].first_arc=s;
        }       
    }
}
//..............................................创建图完毕


//..................................深度优先搜索
void DFS(Graph *g,int i)
{
    arc_node *p; 
    g->vex[i]=1;
    printf("    %d   ",g->adj_list[i].vex);
     p=g->adj_list[i].first_arc;
    while(p!=NULL)
    {
        if(g->vex[p->adjvex]!=1)
            DFS(g,p->adjvex);
        p=p->next_arc;
    }   
}
void DFS_traverse(Graph *g)
{
    int i;
    for(i=0;i<g->vex_num;i++)
        g->vex[i]=-1;
    for(i=0;i<g->vex_num;i++)
    {
        if(g->vex[i]==-1)
            DFS(g,i);
    }
}
//.........................................................................................


//..................................................广度优先搜索
#define N 30

typedef struct Queue
{
    int *base;
    int front,rear,size;

}Queue;

void init_queue(Queue *q)
{
    q->front=0;
    q->rear=0;
    q->size=N;
    q->base=(int*)malloc(q->size*sizeof(int));
}

void push_queue(Queue *q,int vex)
{
    if((q->rear+1)%q->size==q->front)
        printf(" the queue is full\n");
    else
        q->base[q->rear++]=vex;
}

int pop_queue(Queue *q)
{
    int vex;
    if(q->front=q->front)
        printf(" the queue is empty\n");
    else
        vex=q->base[q->front++];
    return vex;
}

void BFS(Graph *g,int i,Queue *q)
{
    arc_node *p; 
    g->vex[i]=1;
    printf("    %d   ",g->adj_list[i].vex);
    push_queue(q,i);
    while(q->front!=q->rear)
    {
        i=pop_queue(q);
         p=g->adj_list[i].first_arc;
        while(p!=NULL)
        {
            if(g->vex[p->adjvex]!=1)
            {
                printf("    %d   ",g->adj_list[i].vex);
                push_queue(q,p->adjvex);
            }
            p=p->next_arc;
        }
    }
}
void BFS_traverse(Graph *g,Queue *q)
{
    int i;
    init_queue(q);
    for(i=0;i<g->vex_num;i++)
        g->vex[i]=-1;
    for(i=0;i<g->vex_num;i++)
    {
        if(g->vex[i]==-1)
            BFS(g,i,q);
    }
}

//...............................................主函数
void main()
{
    Graph g1,*g; Queue *q,q1;
    g=&g1;q=&q1;
    creat_graph(g);
    DFS_traverse(g);
    printf("...............................................\n");
    BFS_traverse(g,q);
}




2014-11-16 14:47
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
收藏
得分:0 
你定义的使用链表实现,但是你的输入scanf("%d",&g->adj_list[i].vex);这里意思是在连续一块内存空间上在链表,当然会造成非法写入。
你用链表定义图的数据结构,就应该用动态建立链表的方式建立,
其次,你的图的结点的输入顺序是怎样的?邻接表是在每个点的相邻接的点都在连表上,如果随意输入顶点值,会有问题的。
最后,你的顶点是不是最好维护一个序号呀,这样不是更好区分每个顶点,要不然你怎么操作每个顶点,用顶点值?要是一样怎么办?
我之前编过一个BFS,DFS,就是输入0号顶点周围的顶点,就直接把他们放在链表中去了,再输入1号顶点周围的顶点,在直接放入1号的链表,一次类推。就可以构造邻接链表。
这是我的方法,方法不巧妙,但可以解决问题,你参考。

2014-11-16 18:53
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 3 楼 soulmate1023
找了一天,终于找到原因了,忘记跟邻接表分配存储空间了,太蠢了,一直以为是输入缓冲区的问题,看来我找问题找错方向了,谢谢您,本来发qq想问一下你的,结果你没在线
2014-11-16 19:57
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
收藏
得分:20 
回复 4 楼 风车转风车 89
哈,没关系,我也有DEBUG一天的情况,一起加油
2014-11-16 20:05
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 5 楼 soulmate1023
自己犯的错,还是自己难发现,
2014-11-16 20:15
快速回复:scanf 出错,求帮忙解决
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017995 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved