首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求帮忙看看这个异常如何改

2013-10-24 
求帮忙看看这个错误怎么改,在线等#includestdio.h#includemalloc.h#includestring.h#includestdlib

求帮忙看看这个错误怎么改,在线等
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>

#define MAX_SIZE  20//定义循环队列的长度

typedef struct{            //初始化的动态分配存储空间
char*base;
char front;
char rear;
int full;//队列是否已满的标志位
int length;
}Queue;

int creat_queue(Queue*q)      //初始化队列
{   if (q->base!=NULL)//队列已经存在,要先销毁
      return 0;
q->base=(char*)malloc(MAX_SIZE*sizeof(char));
q->front=q->rear=0;
q->full=0;
q->length=0;
return 1;
}

int en_queue(Queue*q,char e)      //入队
{   if(q->base==NULL)
        return -1;//是队列不存在 
else if(q->full==1&&q->front==q->rear)
        return 0;//入队前考虑队列是否满了
else {
q->base[q->rear]=e;
    q->rear=(q->rear+1)%MAX_SIZE;//实现循环,如果rear+1满了并不是真正的满了,可以循环
    if(q->front==q->rear)
 q->full=1;
 return 1;}
}

int out_queue(Queue*q,int*e)
{  if(q->base==NULL)
        return -1;//是队列不存在 
   if(q->full==0&&q->front==q->rear)
   return 0; //出队前考虑队列是否为空
 else {
*e=q->base[q->front];
q->front=(q->front+1)%MAX_SIZE;//修改front位置
    if(q->front==q->rear)
q->full=0;//如果出队后两位置相同则队为空了
return 1;
}


void main(){
Queue q;
int i,a1,a2,a3,a4;
char e,k=NULL;
char *e1,*e2;
q.base=NULL;
    e1=e2=&k;//对于指针最好这样初始化定义一下,因为只声明是没有分陪内存的,不能直接用*e
a1=creat_queue(&q);                            //初始化队列
if(a1==1){
printf("已初始化队列!");
}else{
printf("初始化失败!");
}
for(i=0;i<11;i++){//依次进队列e,n,g,i,n,e,e,r,i,n,g;
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
printf("队列不存在!\n");break;
else if(a2==0)
printf("队列已满!\n");break;
else{
printf("已入队!\n");
q->length++;
}
}
 a3=out_queue(&q,e1);//出队一个元素,输出该元素;
 if(a3==-1)
 {  
 printf("队列不存在,请先创建队列!\n");
 } else if(a3==0){ 
 printf("出队失败!因为队列为空!\n");
 }else{
 printf("OK!出队成功");
 printf("出队元素为:%d\n",*e1);
 q->length--;
}

 printf("队列q的元素个数为:%d",q->length);       //输出队列q的元素个数; 

for(i=0;i<3;i++){//依次进队列元素d,e,f; 
printf("请输入第%d个字符",i+1);
scanf("%c",&e);
getchar();
a2=en_queue(&q,e);
if(a2==-1)
printf("队列不存在!\n");break;
else if(a2==0)
printf("队列已满!\n");break;
else{
printf("已入队!\n");
q->length++;
}
}

  printf("队列q的元素个数为:%d",q->length);       //输出队列q的元素个数; 

  for(i=0;i<13;i++){//输出出队序列; 
out_queue(&q,e1);
 printf("%d:%c\n",i+1,*e1);
 q->length--;
}
}
free(q->base);          //释放队列
q->base=NULL;

}


编译时出错:error C2601: 'main' : local function definitions are illegal


请问怎么改 c
[解决办法]

#include<stdio.h>
 #include<malloc.h>
 #include<string.h>
 #include<stdlib.h>

#define MAX_SIZE  20//定义循环队列的长度

typedef struct{            //初始化的动态分配存储空间
char*base;
 char front;
 char rear;
 int full;//队列是否已满的标志位
int length;
 }Queue;

int creat_queue(Queue*q)      //初始化队列
 {   if (q->base!=NULL)//队列已经存在,要先销毁
       return 0;
 q->base=(char*)malloc(MAX_SIZE*sizeof(char));
 q->front=q->rear=0;
 q->full=0;
 q->length=0;
 return 1;
 }

int en_queue(Queue*q,char e)      //入队
 {   if(q->base==NULL)
         return -1;//是队列不存在
else if(q->full==1&&q->front==q->rear)


         return 0;//入队前考虑队列是否满了
else {
 q->base[q->rear]=e;
     q->rear=(q->rear+1)%MAX_SIZE;//实现循环,如果rear+1满了并不是真正的满了,可以循环
     if(q->front==q->rear)
  q->full=1;
 return 1;}
 }

int out_queue(Queue*q,int*e)
 {  if(q->base==NULL)
         return -1;//是队列不存在
    if(q->full==0&&q->front==q->rear)
    return 0; //出队前考虑队列是否为空
  else {
 *e=q->base[q->front];
 q->front=(q->front+1)%MAX_SIZE;//修改front位置
    if(q->front==q->rear)
 q->full=0;//如果出队后两位置相同则队为空了
return 1;
 }

 }


int main(){

 Queue q;
 int i,a1,a2,a3,a4;
 char e,k=NULL;
 char *e1,*e2;
 q.base=NULL;
     e1=e2=&k;//对于指针最好这样初始化定义一下,因为只声明是没有分陪内存的,不能直接用*e
 a1=creat_queue(&q);                            //初始化队列
if(a1==1){
 printf("已初始化队列!");
 }else{
 printf("初始化失败!");
 }
for(i=0;i<11;i++){ //依次进队列e,n,g,i,n,e,e,r,i,n,g;
printf("请输入第%d个字符",i+1);
 scanf("%c",&e);
 getchar();
a2=en_queue(&q,e);
 if(a2==-1){
 printf("队列不存在!\n");break;
 }
 else if(a2==0){
 printf("队列已满!\n");break;
 }
 else{
 printf("已入队!\n");
 q.length++;
 }
 }
  a3=out_queue(&q,e1); //出队一个元素,输出该元素;
 if(a3==-1)
  {
  printf("队列不存在,请先创建队列!\n");
  } else if(a3==0){
  printf("出队失败!因为队列为空!\n");
  }else{
  printf("OK!出队成功");
  printf("出队元素为:%d\n",*e1);
  q.length--;
 }

  printf("队列q的元素个数为:%d",q.length);       //输出队列q的元素个数;

for(i=0;i<3;i++){ //依次进队列元素d,e,f;
printf("请输入第%d个字符",i+1);
 scanf("%c",&e);
 getchar();
a2=en_queue(&q,e);
 if(a2==-1)
printf("队列不存在!\n");
 else if(a2==0){
 printf("队列已满!\n");
 }
 else{
 printf("已入队!\n");
 q.length++;
 }
 }

  printf("队列q的元素个数为:%d",q.length);       //输出队列q的元素个数;

  for(i=0;i<13;i++){ //输出出队序列;
out_queue(&q,e1);
 printf("%d:%c\n",i+1,*e1);
  q.length--;
 }

free(q.base);          //释放队列
q.base=NULL;

return 0;
}



已经把所有错误改掉 但是你程序逻辑 我根本看不进去 代码风格惨淡啊
看看代码大全吧 我半年前也就你这水平

主要错误

if
else if
else
不要加break的

第二点 
.与->的区别
->是指针指向其成员的运算符.是结构体的成员运算符

有问题可以继续问
[解决办法]
引用:
在线等,就这一个错误了,急着交作业。。。。

哥们你这个不是就这一个错误 是有一群错误 编辑器是不见到语法错误 就不往下报了
你是少个}
但是 改完后 你会崩溃 会出现一群错误 不下10个
[解决办法]
下面代码修改了下几个基础的错误,忘记修改了那些了,所以把代码全部贴上!
逻辑问题还没仔细看,但是楼主这个基础错误太多,先不要搞这些复杂东西先,
应该先把基础打好,一步一步的来,不要搞太难的东西打击自己的积极性!


#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>

#define MAX_SIZE  20//定义循环队列的长度

typedef struct{            //初始化的动态分配存储空间
    char*base;
    char front;
    char rear;
    int full;//队列是否已满的标志位
    int length;
}Queue;

    int creat_queue(Queue*q)      //初始化队列
{   if (q->base!=NULL)//队列已经存在,要先销毁
    return 0;
    q->base=(char*)malloc(MAX_SIZE*sizeof(char));
    q->front=q->rear=0;
    q->full=0;
    q->length=0;
    return 1;
}

int en_queue(Queue*q,char e)      //入队
{   
    if(q->base==NULL)
        return -1;//是队列不存在 
    else if(q->full==1&&q->front==q->rear)
        return 0;//入队前考虑队列是否满了
    else {
        q->base[q->rear]=e;
        q->rear=(q->rear+1)%MAX_SIZE;//实现循环,如果rear+1满了并不是真正的满了,可以循环
        if(q->front==q->rear)
            q->full=1;
        return 1;
    }


}
int out_queue(Queue*q,char* e)
{
    if(q->base==NULL)
    return -1;//是队列不存在 
    if(q->full==0&&q->front==q->rear)
        return 0; //出队前考虑队列是否为空
    else {
        *e=q->base[q->front];
        q->front=(q->front+1)%MAX_SIZE;//修改front位置
        if(q->front==q->rear)
            q->full=0;//如果出队后两位置相同则队为空了
        return 1;
    }

}

int main()
{
    Queue q;
    int i,a1,a2,a3,a4;
    char e,k=NULL;
    char *e1,*e2;
    q.base=NULL;
    e1=e2=&k;//对于指针最好这样初始化定义一下,因为只声明是没有分陪内存的,不能直接用*e
    a1=creat_queue(&q);                            //初始化队列
    if(a1==1){
        printf("已初始化队列!");
    }else{
        printf("初始化失败!");
    }
    for(i=0;i<11;i++){ //依次进队列e,n,g,i,n,e,e,r,i,n,g;
        printf("请输入第%d个字符",i+1);
        scanf("%c",&e);
        getchar();
        a2=en_queue(&q,e);
        if(a2==-1)
        {
            printf("队列不存在!\n");
            break;
        }
        else if(a2==0)
        {
            printf("队列已满!\n");
            break;
        }
        else
        {
            printf("已入队!\n");
            q.length++;
        }
    }
    a3=out_queue(&q,e1); //出队一个元素,输出该元素;
    if(a3==-1)
    {
        printf("队列不存在,请先创建队列!\n");
    } else if(a3==0){
        printf("出队失败!因为队列为空!\n");
    }else{
        printf("OK!出队成功");
        printf("出队元素为:%d\n",*e1);
        q.length--;
    }

    printf("队列q的元素个数为:%d",q.length);       //输出队列q的元素个数; 
 for(i=0;i<3;i++){ //依次进队列元素d,e,f; 
        printf("请输入第%d个字符",i+1);
        scanf("%c",&e);
        getchar();
        a2=en_queue(&q,e);
        if(a2==-1)
        {
            printf("队列不存在!\n");
            break;
        }
        else if(a2==0)
        {
            printf("队列已满!\n");
            break;
        }
        else{
            printf("已入队!\n");
            q.length++;
        }
    }

    printf("队列q的元素个数为:%d",q.length);       //输出队列q的元素个数; 

    for(i=0;i<13;i++){ //输出出队序列; 
        out_queue(&q,e1);
        printf("%d:%c\n",i+1,*e1);
        q.length--;
    }
    free(q.base);          //释放队列
    q.base=NULL;

}

热点排行
Bad Request.