| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 769 人关注过本帖
标题:请各位看看那里出错了,谢谢。
只看楼主 加入收藏
saihuo092617
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-1
结帖率:25%
收藏
 问题点数:0 回复次数:6 
请各位看看那里出错了,谢谢。
#ifndef _QUEUE_H_
#define _QUEUE_H_


typedef struct item
{
    int gumption;
    int charisma;
}Item;

#define MAXQUEUE 10

typedef struct node
{
    Item item;
    struct node * next;
}Node;

typedef struct queue
{
    Node * front;       /* 指向队列首的指针 */
    Node * rear;        /* 指向队列尾的指针 */
    int items;          /* 队列中项目的个数 */
}Queue;

/* 操作: 初始化队列                                   */
/* 操作前:pq指向一个队列                              */
/* 操作后:该队列被初始化为空队列                      */
void InitializeQueue (Queue * pq);

/* 操作: 检查队列是否已满                             */
/* 操作前:pq指向一个先前已初始化过的队列              */
/* 操作后:如果该队列已满,则返回true,否则返回false    */
int QueueIsFull (const Queue * pq);

/* 操作: 检查队列是否为空                             */
/* 操作前:pq指向一个先前已初始化过的队列              */
/* 操作后:如果该多列为空,则返回true,否则false        */
int QueueIsEmpty(const Queue * pq);

/* 操作: 确定队列中项目的个数                         */
/* 操作前:pq指向一个先前已初始化过的列表              */
/* 操作后:返回队列中项目的个数                        */
int QueueItemCount(Queue * pq);

/* 操作: 向队列尾添加项目                             */
/* 操作前: pq指向一个先前已初始化过的列表             */
/*          item是要添加到队列尾端的项目               */
/* 操作后: 如果队列未满,item被添加到队列尾部,函数返回true */
/*          否则不改变队列,函数返回false              */
int EnQueue (Item item, Queue * pq);

/* 操作: 从队列首端删除项目                           */
/* 操作前:pq指向一个先前已初始化过的列表              */
/* 操作后:如果队列为非空,队列首端的项目被复制到 * pitem,*/
/*         并从队列中删除,函数饭后true;如果这个操作时多列 */
/*         为空,把队列重置为空队列                    */
/*         如果队列开始时为空,不改变队列,函数返回false */
int DeQueue (Item * pitem, Queue * pq);

/* 操作:清空多列                                       */
/* 操作前: pq指向一个先前已初始化过的队列              */
/* 操作后: 队列被清空                                  */
void EmptyTheQueue (Queue * pq);

#endif
这个是头文件。
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

/* 局部函数 */
struct void CopyToNode(Item item, Node * pn);
struct void CopyToItem(Node * pn, Item * pi);

void InitnalizeQueue (Queue * pq)
{
    pq->front = pq->rear = NULL;
    pq->items = 0;
}

int QueueIsEmpty (const Queue * pq)
{
    return pq->items == 0;
}

int QueueIsFull (const Queue * pq)
{
    return pq->items == MAXQUEUE;
}

int QueueItemCount (const Queue * pq)
{
    return pq->items;
}

int EnQueue (Item item, Queue * pq)
{
    Node * pnew;

    if(QueueIsFull(pq))
        return 0;
    pnew = (Node *) malloc (sizeof(Node));
    if(pnew == NULL)
    {
        fprintf(stderr,"Unable to allocate memory!\n");
        exit(1);
    }
    CopyToNode(item, pnew);
    pnew->next = NULL;
    if(QueueIsEmpty(pq))
        pq->front = pnew;   /* 项目位于队列首端 */
    else
        pq->rear->next = pnew;   /* 链接到队列结尾 */
    pq->rear = pnew;             /*记录队列尾端的移动 */
    pq->items++;                 /*队列项目个数增1 */

    return 1;
}

int DeQueue(Item * pitem, Queue * pq)
{
    Node * pt;

    if(QueueIsFull(pq))
        return 0;
    CopyToItem(pq->front, pitem);
    pt = pq->front;
    pq->front->next = pq->front;
    free(pt);
    pq->items--;
    if(pq->items == 0)
        pq->rear = NULL;
    return 1;
}

/* 清空队列 */
void EmpytTheQueue (Queue * pq)
{
    Item dummy;
    while(!QueueIsEmpty(pq))
        DeQueue(&dummy, pq);
}

/* 局部函数 */
struct void CopyToNode (Item item ,Node * pn)
{
    pn->item = item;
}

struct void CopyToItem (Node * pn, Item * pi)
{
    * pi = pn->item;
}
这个是实现接口文件。

#include <stdio.h>
#include "queue.h"

int main (void)
{
    Queue line;
    Item temp;
    char ch;

    InitializeQueue(&line);
    puts("Testing the Queue interface. Type a to add a value, ");
    puts("type d to delete a value, and type q to quit.");
    while((ch = getchar()) != 'q')
    {
        if(ch != 'a' && ch != 'd')
            continue;
        if(ch == 'a')
        {
            printf("Integer to add: ");
            scanf("%d",&temp);
            if(!QueueIsFull(&line))
            {
                printf("Putting %d into queue\n",temp);
                EnQueue(temp,&line);
            }
            else
                puts("Queue is full!");
        }
        else
        {
            if(QueueIsEmpty(&line))
                puts("Nothing to delete!");
            else
            {
                DeQueue(&temp, &line);
                printf("Removing %d from queue\n",temp);
            }
        }
        printf("%d itmes in queue\n",QueueItemCount(&line));
        puts("Type a to add, d to delede,q to quit: ");
    }
    EmptyTheQueue(&line);
    puts("Bye!");

    return 0;   
}
这个是测试接口文件。当编译时总是出现下列几行错误信息:
e:\新建文件夹 (2)\chengxu4\queue.c(6) : error C2628: '$S1' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(7) : error C2628: '$S2' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(26) : warning C4028: formal parameter 1 different from declaration
e:\新建文件夹 (2)\chengxu4\queue.c(79) : error C2628: '$S3' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(80) : error C2371: 'CopyToNode' : redefinition; different basic types
        e:\新建文件夹 (2)\chengxu4\queue.c(6) : see declaration of 'CopyToNode'
e:\新建文件夹 (2)\chengxu4\queue.c(80) : error C2079: 'CopyToNode' uses undefined struct '$S3'
e:\新建文件夹 (2)\chengxu4\queue.c(84) : error C2628: '$S4' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(85) : error C2371: 'CopyToItem' : redefinition; different basic types
        e:\新建文件夹 (2)\chengxu4\queue.c(7) : see declaration of 'CopyToItem'
e:\新建文件夹 (2)\chengxu4\queue.c(85) : error C2079: 'CopyToItem' uses undefined struct '$S4'
use_q.c
执行 cl.exe 时出错.
请各位大虾看看到底是哪里出错了。我找了半天没找到。谢谢!!!!!
搜索更多相关主题的帖子: next 
2013-03-30 16:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
/* 局部函数 */
struct void CopyToNode(Item item, Node * pn);
struct void CopyToItem(Node * pn, Item * pi);
真是奇葩!

你的注释风格也挺有特色,哈哈。

授人以渔,不授人以鱼。
2013-03-30 16:45
saihuo092617
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-1
收藏
得分:0 
这个是我把一本C语言书上的代码敲下来的,就是不明白哪里出错了,希望各位给指出来,尽可能详细的。谢谢!!!!
2013-03-30 16:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
已经告诉你哪里错了,无视是吧,好的。

授人以渔,不授人以鱼。
2013-03-30 16:53
saihuo092617
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-9-1
收藏
得分:0 
static和struct搞混了
2013-03-30 17:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
要学会看编译信息,这话我反复说过无数次,不知为什么总是有人学不会、不愿看。

授人以渔,不授人以鱼。
2013-03-30 17:03
万光海
Rank: 3Rank: 3
来 自:桂林
等 级:论坛游侠
帖 子:92
专家分:133
注 册:2012-10-21
收藏
得分:0 
顶版主
2013-03-30 17:26
快速回复:请各位看看那里出错了,谢谢。
数据加载中...
 
   



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

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