标题:编译有25个错误
只看楼主
lbdsgg
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-20
结帖率:66.67%
已结贴  问题点数:30 回复次数:10 
编译有25个错误
源程序是这样的:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define STACK_INIT_SIZE    100;
#define STACKINCREMENT 10;
#define ERROR 0;
#define OK 1;
typedef int SElemType;
typedef int Status;
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{
    s.base=((SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!s.base) exit(OVERFLOW);
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return OK;
}
Status push(SqStack &s,SElemType e)
{
    if(s.top-s.base)>=s.stacksize)
    {
        s.base=((SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElenType));
        if(!s.base) exit(OVERFLOW);
        s.top=s.base+s.stacksize;
        s.stacksize+=STACKINCREMENT;
    }
    *s.top=e;s.top++
    return OK
}
Status pop(SqStack &s,int e)
{
    if(s.top==s.base) return ERROR;
    s.top--;e=*s.top;
    return OK;
}
Status destroy(SqStack &s)
{
        if(!s.base) return(OVERFLOW);
        free(s.base);
        s.base=s.top=null;
        s.stacksize=0;
        return OK;
}
void main()
{
    SqStack *s;
    int num,i,N,e;
    InitStack(s);
    printf("输入一个非负十进制数:");
    printf("输入转换为2或8或16进制:")
    while(1)
    {
        scanf("%d",&num);
        if(num<0) printf("输入错误!");
        else break;
    }
    while(1)
    {
        scanf("%d",&N);
        if(N!=2||N!=8||N!=16) printf("输入错误!");
        else break;
    }
    while(num)
    {
        push(s,num%N);
        num=num/N;
    }
    while(s.top-s.base!=1)
    {
        pop(s,e);
        printf("%d",e);
    }

}

编译后错误:
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(18) : error C2143: syntax error : missing ')' before ';'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(18) : error C2143: syntax error : missing ')' before ';'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(18) : error C2059: syntax error : ')'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(18) : error C2100: illegal indirection
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(19) : error C2065: 'OVERFLOW' : undeclared identifier
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(26) : error C2143: syntax error : missing ';' before '>='
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(26) : error C2059: syntax error : ')'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(27) : error C2143: syntax error : missing ';' before '{'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2143: syntax error : missing ')' before ';'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2143: syntax error : missing ')' before ';'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2143: syntax error : missing ')' before ';'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2059: syntax error : ')'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2065: 'SElenType' : undeclared identifier
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2059: syntax error : ')'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(28) : error C2100: illegal indirection
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(34) : error C2143: syntax error : missing ';' before 'return'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(46) : error C2065: 'null' : undeclared identifier
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(46) : error C2440: '=' : cannot convert from 'int' to 'int *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(54) : error C2664: 'InitStack' : cannot convert parameter 1 from 'SqStack *' to 'SqStack &'
        A reference that is not to 'const' cannot be bound to a non-lvalue
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(57) : error C2143: syntax error : missing ';' before 'while'
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(71) : error C2664: 'push' : cannot convert parameter 1 from 'SqStack *' to 'SqStack &'
        A reference that is not to 'const' cannot be bound to a non-lvalue
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(74) : error C2228: left of '.top' must have class/struct/union type
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(74) : error C2228: left of '.base' must have class/struct/union type
E:\Microsoft Visual Studio\COMMON\MSDev98\Bin\jinz.cpp(74) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
搜索更多相关主题的帖子: top include 源程序 
2012-12-15 22:32
qq839431011
Rank: 4
来 自:河北
等 级:业余侠客
帖 子:105
专家分:296
注 册:2012-12-5
得分:0 
一个注释没有  连表达的主题也不写 最少楼主应该表达清楚你要干嘛吧

穷则变,变则通,通则久 寂寞平淡
2012-12-15 23:12
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
宏定义后面怎么能放分号呢
#define STACK_INIT_SIZE    100;#define STACKINCREMENT 10;#define ERROR 0;#define OK 1;

总有那身价贱的人给作业贴回复完整的代码
2012-12-16 00:11
xiaomingtutu
Rank: 2
等 级:论坛游民
帖 子:10
专家分:35
注 册:2012-12-14
得分:0 
程序代码:
你应该是想编一个十进制数转换成二,八或十六进制数的代码吧,你想用栈来输出,其实用一个数组就可以了,你可以看一下我的
#include <stdio.h>
int main()
{
  int num,N,i,q;
  char *p;
  i=0;
  printf("输入一个非负十进制数: ");
  while(1)
  {
    scanf("%d",&num);
    if(num<0) printf("输入错误!重新输入:");
    else break;
  }
  printf("输入转换为2或8或16进制: ");
  while(1)
  {
    scanf("%d",&N);
    if(N!=2&&N!=8&&N!=16) printf("输入错误!重新输入:");
    else break;
  }
  while(num!=0)
  {
    q=num%N;
    if(q>=0&&q<=9)  q=q+'0';
    else q=q-10+'A';
    p[i]=q;
    i++;
    num=num/N;
  }
   i--;
   printf("转换的%d进制数为: ",N);
   while(i>=0)
   {
     printf("%c",p[i]);
     i--;
   }
   printf("\n");
   getchar();
   return 0;
}


[ 本帖最后由 xiaomingtutu 于 2012-12-16 01:34 编辑 ]
2012-12-16 01:33
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
程序我没看,我想说的是,遇到编译错误出现几十个甚至几百个错误的情况下,并不一定是你的程序就有几十个甚至几百个错误,别害怕,有时候可能只是一个小小的失误,注意找错的方法就行了

如何找错?那就是从第一个错误开始,有时候第一个错误解决了,剩下的也都没问题了,也就是说,下面的错误是依赖于上面的错误的,顺次解决错误是明智的选择

小小战士,战士中的战斗机!
2012-12-16 01:49
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:30 
楼主啊,你可长点心吧,低级到可以的错误,少了好多标点啊
程序代码:
 #include <stdio.h>
#include <malloc.h>
#include <stdlib.h>//malloc和stdlib两个头文件的内容貌似差不多,ANSI标准要求用stdlib.h但很多编译器要求用malloc.h

#define STACK_INIT_SIZE    100;
#define STACKINCREMENT 10;
#define ERROR 0;
#define OK 1;
typedef int SElemType;
typedef int Status;
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
Status InitStack(SqStack &s)   //这里是个隐患,地址做形参
{
    s.base=((SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)));//这里少一个括号
    if(!s.base) exit(OVERFLOW); //overflow要定义的,在开头用int overflow=1;定义了再用吧
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return OK;
}
Status push(SqStack &s,SElemType e)
{
    if(s.top-s.base)>=s.stacksize) //这里缺少和括号不说,s.top和s.base都是指针
    {               //s.stacksize是int型的他们不能比较啊,要对s.top和s.base取星
        s.base=((SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElenType)));//这里少括号
        if(!s.base) exit(OVERFLOW);
        s.top=s.base+s.stacksize;
        s.stacksize+=STACKINCREMENT;
    }
    *s.top=e;s.top++;//这里少分号
    return OK
}
Status pop(SqStack &s,int e)
{
    if(s.top==s.base) return ERROR;
    s.top--;e=*s.top;
    return OK;
}
Status destroy(SqStack &s)
{
        if(!s.base) return(OVERFLOW);
        free(s.base);
        s.base=s.top=null; //NULL是空指针,NUL是ASCII中零的位模式
        s.stacksize=0;
        return OK;
}
void main()
{
    SqStack *s;
    int num,i,N,e;
    InitStack(s);//s是个指针,而他对应的形参是地址,我们可以把地址赋值给指针,却不能
                //把指针赋值给地址,参数的传递就以一个赋值的过程,等号左边的必须具备
                //等号右边的所有的值或表达式所有的限制符,楼主如果在这里有疑问可以看看
                //《C专家编程》第19页里面就有?
    printf("输入一个非负十进制数:");
    printf("输入转换为2或8或16进制:");//这里少分号
    while(1)
    {
        scanf("%d",&num);
        if(num<0) printf("输入错误!");
        else break;
    }
    while(1)
    {
        scanf("%d",&N);
        if(N!=2||N!=8||N!=16) printf("输入错误!");
        else break;
    }
    while(num)
    {
        push(s,num%N); //这里也是把指针传递给地址了
        num=num/N;
    }
    while(s.top-s.base!=1)//两个指针相减不等于1???
    {
        pop(s,e); //我不知道这里为什么会通过编译,但是貌似参数s不对
        printf("%d",e);
    }

}

本人新手,说错勿怪

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-16 10:49
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:0 
if(!s.base) exit(OVERFLOW);
网上说用OVERFLOW之前要用int OVERFLOW=1;先定义

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-16 10:51
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:0 
宏定义之后不用分号

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-16 10:56
lbdsgg
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-20
得分:0 
回复 4楼 xiaomingtutu
用数组直接来实现我之前就写好了..但是这个是数据结构的作业,我直接用数组的写好交上去应该没分数拿吧.
2012-12-16 11:37
lbdsgg
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-20
得分:0 
回复 7楼 yaobao
我之前已经#define ERROR 0了额
2012-12-16 11:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-391435-1-1.html




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

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