| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:请大家帮帮我!!!一个程序引发的问题!!
只看楼主 加入收藏
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
结帖率:70.59%
收藏
已结贴  问题点数:10 回复次数:6 
请大家帮帮我!!!一个程序引发的问题!!
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
struct brack
{
    char*base;
    char*top;
    int stacksize;
};
void init(struct brack*m);
void push(struct brack*m,char c);
int pop(struct brack*m,char*e);
void main()
{
    char ch,t;
    int flag;
    struct brack sq;
     init(&sq);
    while((ch=getchar())!='\n')
    {
        if(ch=='('||ch=='['||ch=='{')
            push(&sq,ch);
        else if(ch==')'||ch==']'||ch=='}')
        {
            flag=pop(&sq,&t);
            if(flag==0)
                break;
            else if((ch==')')&&(t=='('))
                flag=1;
            else if((ch==']')&&(t=='['))
                flag=1;
            else if((ch=='}')&&(t=='{'))
                flag=1;
            else {
                flag=0;
                break;
            }
        }
    }
   
    if(flag==1)
        printf("match!!!\n");
    else
        printf("not match!!!\n");
}
void init(struct brack*m)
{
    m->base=m->top=(struct brack*)malloc(SIZE*sizeof(struct brack));      就是这一行: : cannot convert from 'struct brack *' to 'char *'
    if(!m->base)
    {printf("cant creat!\n");
    exit(0);
    }
    m->top=m->base;
    m->stacksize=SIZE;
}

void push(struct brack*m,char c)
{
    if((m->top-m->base)==m->stacksize)
        printf("stack full\n");
    else
        *m->top++=c;
}
int pop(struct brack*m,char*e)
{
    int FLAG;
    if(m->top==m->base)
        FLAG=0;
    else{
        *e=*--m->top;
        FLAG=1;
    }
    return FLAG;
}


1.为什么这个程序在TC能运行,到了VC++就显示 : cannot convert from 'struct brack *' to 'char *',这是为什么???
2.我最初都使用的"m.top,m.base",后来改成了“m->top,m->base''才能用,我不太清楚他们的区别
3.void init(struct brack*m);
void push(struct brack*m,char c);
int pop(struct brack*m,char*e);
这些*号,能换成&吗,我不太清楚他们的区别


请高手救我!!!

搜索更多相关主题的帖子: pop include 
2010-10-31 22:29
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
还以为是一个程序引发的血案

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-31 22:45
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 2楼 vandychan
请赐教
2010-10-31 22:47
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
  m=(struct brack*)malloc(SIZE*sizeof(struct brack));      

If You Want Something, Go Get It, Period.
2010-11-01 13:22
七有新人
Rank: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:10 
struct brack
{
    char*base;
    char*top;
    int stacksize;
};
m->base=m->top=(struct brack*)malloc(SIZE*sizeof(struct brack));
结构体内定义了base和top为char型的指针,而你却开辟的struct brack型的内存

如果楼主想要做的是一个栈的话,那楼主需要改的地方就很多了,因为我还没有
看出来楼主究竟想做个链式栈还是顺序栈,都有点像。更像顺序栈。楼主设计混乱,
应该理一下头绪了

图!
不一定是真相!
2010-11-01 16:02
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 5楼 七有新人
我要做的是顺序栈,不至于看不出来吧!
我在
图片附件: 游客没有浏览图片的权限,请 登录注册
,里面就能过呀,就是在VC++6.0里面过不了!
我也发现了你说的问题,但改成m=(struct brack*)malloc(SIZE*sizeof(struct brack));   就会出现
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-11-01 18:14
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
收藏
得分:0 
回复 6楼 lizjohn
顺便能解决我这两个问题吗:2.我最初都使用的"m.top,m.base",后来改成了“m->top,m->base''才能用,我不太清楚他们的区别
3.void init(struct brack*m);
void push(struct brack*m,char c);
int pop(struct brack*m,char*e);
这些*号,能换成&吗,我不太清楚他们的区别


2010-11-01 18:17
快速回复:请大家帮帮我!!!一个程序引发的问题!!
数据加载中...
 
   



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

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