| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 680 人关注过本帖
标题:新手求学,大家看到的能帮帮就帮帮
只看楼主 加入收藏
a597910538
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2011-5-21
结帖率:100%
收藏
 问题点数:0 回复次数:12 
新手求学,大家看到的能帮帮就帮帮
各位好,刚刚学C也不久,在用的时候出现了很多的问题,还望大家帮帮忙!
这个程序的功能就是把100个以内的字母存入队列中(这是用链式存储结构的队列,后面我就不多说了),进过我的重复的测试和修改,发现没次输出的结果都是重复输出“没有生产计划”这个结果(看了代码你就明白了)!根据我的猜测应该是入队的函数有问题,可是我一把函数改动,就会报错!
#include<stdio.h>
#include<malloc.h>
#define maxsize 100
typedef struct node1
{
    char data;
    struct node1 *next;
}LINKQLIST;

typedef struct
{
    LINKQLIST *front,*rear;
}production;//生产
void initlinkqueuep(production *q)//初始化
{
    q->front=(LINKQLIST *)malloc(sizeof(LINKQLIST));
    (q->front)->next=NULL;
    q->rear=q->front;
}
char getlinkfrnetp(production *q)//数据读取
{
    char v;
    if(q->front==q->rear)
        printf("没有生产计划\n");
    else
        v=(q->front)->next->data;
    return v;
}

void enlinkqueuep(production *q,int x)//插入数据
{
    (q->rear)->next =(LINKQLIST *)malloc(sizeof(LINKQLIST));
    q->rear=(q->rear)->next;
    (q->rear)->next=NULL;
}
void main()//这个主函数的功能是  初始化队列===》将一组数据存入队列中===》输出队列中的数据
{
    production q;
    int i=0;
    char ch[maxsize];
    //initlinkqueuep(&q)    //初始化
    //printf("初始化成功!\n");
    printf("请输入生产计划:");
    for(i=1;i<maxsize;i++)
    {
        scanf("%3c",&ch);//输入字母
        if(ch[i]='\n') //当输入‘\n’输入循环结束
            break;
        else      
        {
            enlinkqueuep(&q,i);
        }
    }
    printf("返回值:");
    for(i=0;i<maxsize;i++)   
        {
            ch[i]=getlinkfrnetp(&q);
            if(ch[i]='\0')//若返回值是'\0'则结束循环,不过根据我的测试这个循环控制不了,不过我字母修改输出次数都没有变  
            {
                i=maxsize;
                printf("%d",i);
                break;
            }
            else
                printf("%2c",ch[i]);
        
        }
}
搜索更多相关主题的帖子: include 生产计划 
2011-06-06 17:49
topki
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2011-5-12
收藏
得分:0 
强悍。,留名等牛人出现·
2011-06-06 22:08
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
// 错误
    for(i=1;i<MAXSIZE;i++)
    {
        scanf("%3c",&ch);//输入字母  错误
%3c不知道我不知道,但那个&ch肯定错误
        if(ch[i]='\n') //当输入‘\n’输入循环结束
            break;
        else
        {
            enlinkqueuep(&q,i); 该函数什么功能啊
        }
    }

[ 本帖最后由 cosdos 于 2011-6-6 22:35 编辑 ]

—>〉Sun〈<—
2011-06-06 22:33
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
void enlinkqueuep(production *q,int x)//插入数据
 {
     (q->rear)->next =(LINKQLIST *)malloc(sizeof(LINKQLIST));
     q->rear=(q->rear)->next;
     (q->rear)->next=NULL;
 }
 X变量没有使用到。干什么用的?为什么是int,而不是char?
        scanf("%3c",&ch);//输入字母
 为什么要读3个字符?
        if(ch[i]='\n') //当输入‘\n’输入循环结束
 这句应该是==而不是=。另外由于你上一句读入的字符只有3个,你这句换成==则当i大于2后都是随机的值,你现在句子的意思是ch[i] = 10的赋值,它的返回值是10,也就是if条件成立,这样else后的语句永远不会执行到。

先改完这些再说吧。

重剑无锋,大巧不工
2011-06-06 22:33
张义宇
Rank: 2
等 级:论坛游民
帖 子:40
专家分:37
注 册:2011-5-19
收藏
得分:0 
加油  我也不会
2011-06-06 22:39
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
先把链表功能完善了。

链表操作都用函数。

你链表插入删除如何完成的?

—>〉Sun〈<—
2011-06-06 22:40
ZJU_GAO
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-6
收藏
得分:0 
你的这段代码问题是相当多啊!第一你初始化了一个结构体q,那对结构体成员的访问应该是q.front,q.rear。第二main函数的返回类型应该是int型。第三你创建了单向链表后内存释放你没有考虑。第四单个字符的获取你完全可以使用getchar()。第五你的插入数据函数第二个参数根本就没用。先给你找这几个,你自己想好好改改吧
2011-06-06 22:43
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define maxsize 100

typedef struct Node
{
    char ch;
    struct Node *next;
} Node;

typedef struct Queue
{
    Node *head;
    Node *tail;
} Queue;

Node* initializeNode(Node *p, char c)
{
    if (NULL == p)
        return NULL;
        
    p->ch = c;
    p->next = NULL;
    return p;
}

Queue* initializeQueue(Queue *l)
{
    if (NULL == l)
        return NULL;

    l->head = l->tail = NULL;
    return l;
}

Node* inQueue(Queue *l, Node *new_node)
{
    Node *p;
    if (NULL == l || NULL == new_node)
        return NULL;

    new_node->next = NULL;

    p = l->tail;
    if (NULL == p)
    {
        l->tail = new_node;
        l->head = new_node;
    }
    else
    {
        p->next = new_node;
        l->tail = new_node;
    }
    return new_node;
}

Node* outQueue(Queue *l)
{
    Node *p;
    if (NULL == l)
        return NULL;
        
    if (NULL == l->head)
        return NULL;
        
    p = l->head;
    l->head = p->next;
    
    if (NULL == l->head)
        l->tail = NULL;
        
    return p;
}

int main(void)
{
    int i=0;
    Node *p;
    int ch;
    Queue production;
    
    initializeQueue(&production);
    
    printf("请输入生产计划:");
    for(i=1; i<maxsize; i++)
    {
        scanf("%c", &ch );
        if('\n' == ch)
            break;

        p = (Node*)malloc(sizeof(Node));
        initializeNode(p, ch);
        inQueue(&production, p);
    }
    
    printf("返回值:");
    i=0;
    while ( NULL != (p = outQueue(&production)) )
    {
        ++i;
        ch = p->ch;
        free(p);
        printf("%2c", ch);
    }
    printf("\n共%d项\n", i);
    
    system("pause");
    return 0;
}


[ 本帖最后由 cosdos 于 2011-6-6 23:24 编辑 ]

—>〉Sun〈<—
2011-06-06 23:17
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
最终修改版。

—>〉Sun〈<—
2011-06-06 23:25
a597910538
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2011-5-21
收藏
得分:0 
谢谢大家的帮助,大家辛苦了!
2011-06-07 07:58
快速回复:新手求学,大家看到的能帮帮就帮帮
数据加载中...
 
   



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

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