| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 599 人关注过本帖
标题:主函数调运一个函数,那个函数一直循环运行,跳不出去,是怎么回事
只看楼主 加入收藏
木子疍
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-9-28
结帖率:100%
收藏
 问题点数:0 回复次数:3 
主函数调运一个函数,那个函数一直循环运行,跳不出去,是怎么回事
#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;


struct Nodetype
{
    int number;     /*考生的考号*/
    string name;       /*考生姓名*/
    string sex;          /*考生性别*/
    int age;             /*考生年龄*/
    string category;  /*考生报考类别*/
    Nodetype *next;
    Nodetype *head;
};

class student
{
private:
    Nodetype *head;
public:
    student(){};
    ~student(){};
    Nodetype *creat();      /*建立链表*/
    void output(Nodetype *head);    /*输出函数*/
    void add(Nodetype *&head,Nodetype *stu);        /*插入函数*/
    void deleted(Nodetype *&head,int number);   /*删除函数*/
    void find(Nodetype *head,int key);        /*查找函数*/
    void modify(Nodetype *head,int key1);    /*修改函数*/

};

 Nodetype *student::creat()        /*建立链表*/
{
    int n;
    cout <<"请输入考生人数:";
    cin >>n;
    cout <<"请依次输入考生的考号,姓名,性别,年龄及报考类别!"<<endl;
    Nodetype *p1;
    Nodetype *p2;
    p1=new  Nodetype;
    cin >>p1->number >>p1->name >>p1->sex >>p1->age >>p1->category;
    head=NULL;
    p2=p1;
    while(p1->number<n)
    {
        if(head==NULL)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=new Nodetype;
        cin >>p1->number >>p1->name >>p1->sex >>p1->age >>p1->category;
    }
    p2->next=NULL;
    delete p1;
    return (head);
}


void student ::output(Nodetype *head)         /*输出函数,输出链表内容*/
{
    if(head=NULL)
    {
        cout <<"对不起,内容为空,不能输出"<<endl;
        return;
    }
    cout <<"\t" <<"考号" <<"\t" <<"姓名" <<"\t"<<"性别"<<"\t" <<"年龄"<<"\t" <<"报考类别" <<endl;
    while(head)
    {
        cout <<"\t" <<head->number <<"\t" <<head->name <<"\t" <<head->sex <<"\t" <<head->age <<"\t" <<head->category <<endl;
        head=head->next;
    }
}


void student ::add(Nodetype *&head,Nodetype *stu) /*插入操作*/
{
    if(head=NULL)
    {
        head=stu;
        stu->next=NULL;
    }
    if(head->number>stu->number)
    {
        stu->next=head;
        head=stu;
    }
    Nodetype *p=head;
    while(p->next&&p->next->number<stu->number)
        p=p->next;
    stu->next=p->next;
    p->next=stu;
}

void student ::deleted(Nodetype *&head,int number) /*删除操作*/
{
    Nodetype *p1;
    if(!head)
    {
        cout <<"空表,不能进行删除操作" <<endl;
        return;
    }
    if(head->number==number)
    {
        p1=head;
        head=p1->next;
        delete p1;
        cout <<"你删除的考生信息是:"  <<"\t" <<p1->number <<"\t" <<p1->name <<"\t" <<p1->sex <<"\t" <<p1->age <<"\t" <<p1->category <<endl;
        return;
    }
    for(Nodetype *p2=head;p2->next;p2=p2->next)
    {
        if(p2->next->number==number)
        {
            p1=p2->next;
            p2->next=p1->next;
            delete p1;
            cout <<"你删除的考生信息是:"  <<"\t" <<p1->number <<"\t" <<p1->name <<"\t" <<p1->sex <<"\t" <<p1->age <<"\t" <<p1->category <<endl;
            return;
        }
    }
    cout <<"没有该考生"<<"\n";
    return;
}

void student::find(Nodetype *head,int key) /*查找操作*/
{
    Nodetype *p;
    if(head=NULL)
    {
        cout <<"对不起,内容为空,不能输出"<<endl;
        return;
    }
    if(head->number==key)
    {
        cout <<"你查找的学生信息为:" <<endl;
        cout <<"\t" <<"考号" <<"\t" <<"姓名" <<"\t"<<"性别"<<"\t" <<"年龄"<<"\t" <<"报考类别" <<endl;
        cout <<"\t" <<head->number <<"\t" <<head->name <<"\t" <<head->sex <<"\t" <<head->age <<"\t" <<head->category <<endl;
        return;
    }
    for(p=head;p->next;p=p->next)
    {
        if(p->next->number==key)
        {
            cout <<"你查找的学生信息为:" <<endl;
            cout <<"\t" <<"考号" <<"\t" <<"姓名" <<"\t"<<"性别"<<"\t" <<"年龄"<<"\t" <<"报考类别" <<endl;
            cout <<"\t" <<p->next->number <<"\t" <<p->next->name <<"\t" <<p->next->sex <<"\t" <<p->next->age <<"\t" <<p->next->category <<endl;
            return;
        }
    }
    cout <<"没有该考生"<<endl;
}

void student::modify(Nodetype *head,int key1)
{
    Nodetype *p;
    Nodetype *p1;
    p=new Nodetype;
    if(head=NULL)
    {
        cout <<"对不起,内容为空,不能输出"<<endl;
        return;
    }
    if(head->number==key1)
    {
        cout <<"你要修改的学生原有信息为:" <<endl;
        cout <<"\t" <<head->number <<"\t" <<head->name <<"\t" <<head->sex <<"\t" <<head->age <<"\t" <<head->category <<endl;
        cout <<"请输入修改后的信息:"<<endl;
        cin >>p->number>>p->name>>p->sex>>p->age>>p->category ;
        head=p;
        return;
    }
    for(p1=head;p1->next;p1=p1->next)
    {
        if(p1->next->number==key1)
        {
            cout <<"你要修改的学生原有信息为:" <<endl;
            cout <<"\t" <<p1->next->number <<"\t" <<p1->next->name <<"\t" <<p1->next->sex <<"\t" <<p1->next->age <<"\t" <<p1->next->category <<endl;
            cout <<"请输入修改后的信息:"<<endl;
            cin >>p->number>>p->name>>p->sex>>p->age>>p->category ;
            p1->next=p;
            return;
        }
    }
    cout <<"没有该考生"<<endl;
}

void main()
{
    Nodetype *head=NULL;
    student person;
    int number,key,key1;
    char c;
    char choice;
    cout <<"首先请建立考试信息系统!" <<endl;
    person.creat();
    head=person.creat();   /*就是这个函数!!!!!!!!!!!!!!!!!!11*/
    person.output(head);

}


如上代码,我在调运创建链表的函数时,该函数一直循环运行,跳不出去。
搜索更多相关主题的帖子: category private include public number 
2014-10-10 18:27
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
我不太懂,但我觉得这里有些看不明白。
Nodetype *student::creat()        /*建立链表*/
你的Nodetype不是刚一开始定义的一个结构体吗?但在这一块当中把creat声明为Nodetype类的同时又把它定义为了一种函数。你确定这样做没问题?
2014-10-10 21:38
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
回复 2 楼 yangfrancis
那个是类.
一个是类成员的声明,
后面那个是类成员的定义.

hl928452957@gmail点com

2014-10-11 02:54
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
你说问题出现在
head=person.creat();
那么你就要检查你创建的那个链表的代码
Nodetype *student::creat()

--然后无限循环只会出现在循环体当中. 你就一个while , so 检查一下吧

--我试了一下输出错误类型将会无限循环,正常全数字运行通过.所以你应该另外写一段数据类型检测.

hl928452957@gmail点com

2014-10-11 03:07
快速回复:主函数调运一个函数,那个函数一直循环运行,跳不出去,是怎么回事
数据加载中...
 
   



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

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