| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1006 人关注过本帖
标题:tc与vc++编辑c语言以哪个为标准?
只看楼主 加入收藏
jerrymouse
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-14
收藏
 问题点数:0 回复次数:7 
tc与vc++编辑c语言以哪个为标准?
有些程序tc运行的出来,但是vc++确不行
这个时候到底以哪个为基准?哪个才是正确的?
比如我这个程序
#include <stdio.h>
#include <malloc.h>
#define NULL 0
#define max 1024
typedef struct bitnode{char data;
                       struct bitnode *lchild,*rchild;}bitnode;
typedef struct {bitnode *data[max];
                int top;}seqstack;
main()
{seqstack *s,*q;
 bitnode *b=NULL,*p,*r;
 char str[max],x,ch;
 int i=0,j=0,k;
把字符装入数组中
 scanf("%c",&x);
 while(x!='\n')
 {str[i++]=x;
  scanf("%c",&x);
 };
创建二叉数
 s=(seqstack*)malloc(sizeof(seqstack));
 s->top=-1;
 ch=str[j];
 while(ch!='\0')
 {
  switch(ch)
  {case '(' : s->top++;s->data[s->top]=p;k=1;break;
   case ')' : s->top--;break;
   case ',' : k=2;break;
   default: p=(bitnode*)malloc(sizeof(bitnode));
       p->data=ch;p->lchild=p->rchild=NULL;
       if(b==NULL)
           b=p;
       else
       {
           switch(k)
           {case 1: s->data[s->top]->lchild=p;break;
            case 2: s->data[s->top]->rchild=p;break;
           };
       };
  };
  j++;
  ch=str[j];
 };
先序遍历二叉数
 q=(seqstack*)malloc(sizeof(seqstack));
 q->top=-1;
 if(b)
 {q->top=0;
  q->data[q->top]=b;
  while(q->top>=0)
  {r=q->data[q->top];
   q->top--;
   printf("%c",r->data);
   if(r->rchild!=NULL)
   {q->top++;
    q->data[q->top]=r->rchild;
   };
   if(r->lchild!=NULL)
   {q->top++;
    q->data[q->top]=r->lchild;
   };
  };
 };
}
tc可以运行出来

vc++却说

编译出来都没有错误
就是运行的时候不一样
非常感谢大家的帮忙
谢谢!

[[it] 本帖最后由 jerrymouse 于 2008-10-14 10:52 编辑 [/it]]
搜索更多相关主题的帖子: c语言 
2008-10-14 10:50
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
这两个都不标准,但是VC比TC要好一些

至于你出现这个错误,肯定是指针越界了,用单步调试好好查查.

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-10-14 11:04
jerrymouse
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-14
收藏
得分:0 
谢谢版主
再问一下什么叫指针越界?
单部试调是什么方法?
2008-10-14 11:18
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
帮你改掉了大部分的错误(包括注释不写在注释符里面的低级错误),剩下的你自己解决吧,编译没错误?打死我都不信,你程序里面没来由写几个汉字,编译没有错误那才叫怪了!!
程序代码:
#include <stdio.h>
#include <malloc.h>
#define max 1024
typedef struct bitnode
{
    char data;
    struct bitnode *lchild, *rchild;
}bitnode;
typedef struct
{
    bitnode *data[max];
    int top;
} seqstack;

int main()
{
    seqstack *s, *q;
    bitnode *b = NULL, *p = NULL, *r = NULL;
    char str[max], x, ch;
    int i = 0, j = 0, k = 0;
    //把字符装入数组中
    scanf("%c", &x);
    while (x != '\n')
    {
        str[i++] = x;
        scanf("%c", &x);
    }
    //创建二叉数
    s = (seqstack*)malloc(sizeof(seqstack));
    s->top = -1;
    ch = str[j];
    while (ch != '\0')
    {
        switch (ch)
        {
        case '(' :
            s->top++;
            s->data[s->top] = p;
            k = 1;
            break;
        case ')' :
            s->top--;
            break;
        case ',' :
            k = 2;
            break;
        default:
            p = (bitnode*)malloc(sizeof(bitnode));
            p->data = ch;
            p->lchild = p->rchild = NULL;
            if (b == NULL)
                b = p;
            else
            {
                switch (k)
                {
                case 1:
                    s->data[s->top]->lchild = p;
                    break;
                case 2:
                    s->data[s->top]->rchild = p;
                    break;
                };
            };
        };
        j++;
        ch = str[j];
    }
    //先序遍历二叉数
    q = (seqstack*)malloc(sizeof(seqstack));
    q->top = -1;
    if (b)
    {
        q->top = 0;
        q->data[q->top] = b;
        while (q->top >= 0)
        {
            r = q->data[q->top];
            q->top--;
            printf("%c", r->data);
            if (r->rchild != NULL)
            {
                q->top++;
                q->data[q->top] = r->rchild;
            }
            if (r->lchild != NULL)
            {
                q->top++;
                q->data[q->top] = r->lchild;
            }
        }
    }
    return 0;
}


专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-14 15:25
jerrymouse
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-14
收藏
得分:0 
谢谢starwing83!
那个汉字是我自己在论坛来加的,本来没有
改了之后编译没问题
程序vc还是运行不出来
和以前的问题一样
我郁闷死了这个程序做了很久了
谁能再提醒我一下吗?
非常感谢大家

[[it] 本帖最后由 jerrymouse 于 2008-10-14 15:47 编辑 [/it]]
2008-10-14 15:44
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
剩下的都是内存问题了,你自己慢慢解决吧

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-14 16:48
jerrymouse
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-14
收藏
得分:0 
内存问题是不是属于很难的那种?
有没有这方面的资料?
谢谢帮忙了!
还花了你那么多时间
2008-10-14 17:09
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
[bo][un]jerrymouse[/un] 在 2008-10-14 11:18 的发言:[/bo]

谢谢版主
再问一下什么叫指针越界?
单部试调是什么方法?

打错字了,是"单步调试"
在VC中按F11或F10
这两个键的区别是,如果是这一步是调用一个函数,按F11会跟进函数体里面,而F10直接把这个函数运行完

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-10-14 17:20
快速回复:tc与vc++编辑c语言以哪个为标准?
数据加载中...
 
   



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

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