| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 509 人关注过本帖
标题:求助 case自动跳出问题,求高手,求解释
只看楼主 加入收藏
穿靴子的毛
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-11-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
求助 case自动跳出问题,求高手,求解释
#include<iostream>
#include<stdbool.h>
#include<stdio.h>
using namespace std;
class SLNote
{
    public:
        int data;
        SLNote* next;
        SLNote(SLNote* nextNote=NULL)
        {
            next=nextNote;
        }
        SLNote(const int& item,SLNote* nextNode=NULL)
        {
            data=item;next=nextNode;
        }
};
class SLList
{
    private:
        SLNote *head,*tail,*currptr;
        int size;
    public:
        SLList()
        {
            head=new SLNote();
            size=0;
        }
        ~SLList()
        {
            while(!IsEmpty())
            {
                currptr=head->next;
                head->next=currptr->next;
                delete currptr;
            }
            delete head;
        }
        bool IsEmpty()const
        {
            return head->next==NULL;
        }
        int length()
        {
            return size;
        }
        void create();
        void Find(int k);
        void Search(const int& item);
        void Delete(int k,int& item);
        void Insert(int k,const int& item);
        void Output();
};
void SLList::create()
{
    int c;
    SLNote *a,*b;
    a=head;
    cout<<"请输入数列(以#结束):";
    while(cin>>c&&c!='#')
    {
        b=new SLNote(c);
        a->next=b;
        a=b;
        size++;
    }
}
void SLList::Find(int k)
{
    SLNote *p;
    int i;
    if(k<1)
    {
        cout<<"存取位置不合法"<<endl;
        return;
    }
    p=head;
    i=0;
    while(p!=NULL&&i<k)
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
        cout<<"无此结点"<<endl;
    else
        cout<<"该节点的值为:"<<p->data<<endl;
}
void SLList::Search(const int& item)
{
    SLNote *p;
    int i;
    p=head->next;
    i=1;
    while(p!=NULL&&p->data!=item)
    {
        p=p->next;
        i++;
    }
    if(p!=NULL)
        cout<<"该结点在"<<i<<"位置"<<endl;
    else
        cout<<"不存在该结点"<<endl;
}
void SLList::Delete(int k,int& item)
{
    SLNote *p,*q;
    int i;
    if(k<1)
    {
        cout<<"删除不合法"<<endl;
        return;
    }
    p=head;i=1;
    while(p!=NULL&&i<k)
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
    {
        cout<<"无此结点"<<endl;
        return;
    }
    q=p->next;
    p->next=q->next;
    item=q->data;
    delete q;
}
void SLList::Insert(int k,const int& item)
{
    SLNote *p,*s;
    int i;
    if(k<0)
    {
        cout<<"插入不合法"<<endl;
        return;
    }
    p=head;
    i=0;
    while(p!=NULL&&i<k)
    {
        p=p->next;
        i++;
    }
    if(p==NULL)
    {
        cout<<"插入不合法"<<endl;
        return;
    }
    s=new SLNote;
    s->data=item;
    s->next=p->next;
    p->next=s;
}
void SLList::Output()
{
    SLNote *p;
    p=head->next;
    while(p!=NULL)
    {
        cout<<p->data<<' ';
        p=p->next;
    }
    cout<<endl;
}
int main()
{
    printf("|---------------------------|\n");
    printf("|        1、创建操作        |\n");
    printf("|        2、存取操作        |\n");
    printf("|        3、查找操作        |\n");
    printf("|        4、插入操作        |\n");
    printf("|        5、删除操作        |\n");
    printf("|        0、退出            |\n");
    printf("|---------------------------|\n");
    int a,t,k;
    SLList wy;
    while(cin>>a)
    {
        switch(a)
        {
            case 0:
                return 0;
            case 1:
                wy.create();
                cout<<"创建成功"<<endl;
                wy.Output();
                break;
            case 2:
                cout<<"要存取的结点位置为:";
                cin>>k;
                wy.Find(k);
                wy.Output();
                break;
            case 3:
                cout<<"要查找的结点为:";
                cin>>k;
                wy.Search(k);
                wy.Output();
                break;
            case 4:
                cout<<"要插入的数据:";
                cin>>k;
                cout<<"要插入的位置";
                cin>>t;
                wy.Insert(k,t);
                wy.Output();
                break;
            case 5:
                cout<<"要删除结点的位置:";
                cin>>k;
                wy.Delete(k,t);
                cout<<"已删除结点:"<<t<<endl;
                wy.Output();
                break;
            default:
                cout<<"输入错误请重新输入"<<endl;
        }
    }
}
创建单链表后自动跳出,即使改成goto依然跳出,求解释……
搜索更多相关主题的帖子: private include public 
2011-11-12 00:41
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
收藏
得分:20 
在倒数第三行加上
cin.clear();
cin.sync();

2011-11-12 10:34
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
收藏
得分:0 
提几个小小的建议
1、#include<stdbool.h>不是必须的,建议不用到的话就不要包含进来了。
2、使用stdlib.h这些C库的话,建议用cstdlib代替。你的这个程序如果没有使用printf,只使用第一个头文件就搞定了。


2011-11-12 10:45
快速回复:求助 case自动跳出问题,求高手,求解释
数据加载中...
 
   



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

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