| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 414 人关注过本帖
标题:请指点一下这个程序的问题
只看楼主 加入收藏
NewYear
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2013-5-14
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:2 
请指点一下这个程序的问题
#include <iostream>
#include <string>
using namespace std;
class book
{
public:
    int num;
    float price;
    book *next;
};
book *head=NULL;
bool check(string str)
{
    for (int i=0;i<str.length();i++)
    {
        if ((str[i]>'9'||str[i]<'0')&&(str[i]!='.'))
        {
            return false;
        }
    }
    return true;
   
}
book *creat()
{
    book *p1,*p2;
    p1=new book;
    head=p1;
    p2=p1;
    cout<<"请输入图书的编号,以0结束输入:";
    string str;
    cin>>str;
    while (!check(str))
    {
        cout<<"编号输入错误,请重新输入,按0结束!"<<endl;
        cin>>str;
    }
    p1->num=atoi(str.c_str());
    if (p1->num!=0)
    {
        cout<<"请输入图书的价格:";
        cin>>str;
        while (!check(str))
        {
            cout<<"价格输入错误,请重新输入,按0结束!"<<endl;
            cin>>str;
        }
        p1->price=atof(str.c_str());
    }
    else
    {
        delete p1;
        p2=NULL;
        p2->next=NULL;
        head=NULL;
        return head;
    }
    while(p1->num!=0)
    {
        p2=p1;
        p1=new book;
        cout<<"请输入图书的编号,以0结束输入:";
        cin>>str;
        while (!check(str))
        {
            cout<<"编号输入错误,请重新输入,按0结束!"<<endl;
            cin>>str;
        }
        p1->num=atoi(str.c_str());
        if (p1->num!=0)
        {
            cout<<"请输入图书的价格:";
            cin>>str;
            while (!check(str))
            {
                cout<<"价格输入错误,请重新输入,按0结束!"<<endl;
                cin>>str;
            }
            p1->price=atof(str.c_str());
        }
        else cout<<"录入结束!"<<endl;
        p2->next=p1;
    }
    delete p1;
    p2->next=NULL;
    return head;
}
void showbook(book *head)
{
    if (!head)
    {
        cout<<"该链表为空链表!"<<endl;
        return;
    }
    while (head)
    {
        cout<<"Num:"<<head->num<<"\t"<<"Price:"<<head->price<<endl;
        head=head->next ;
    }
}
void Delete(book *head,int num)
{
    book *p1,*p2;
    if (head==NULL)
    {
        cout<<"该链表为空链表!"<<endl;
        return;
    }
    if (head->next==NULL)
    {
        p1=head;
        head=NULL;
        ::head=head;
        delete p1;
        cout<<"删除头结点成功!"<<endl;
        return;
    }
    p1=head;
    p2=p1;
    while (p1)
    {
        if (head->num==num)
        {
        p1=head;
        head=head->next;
        ::head=head;
        delete p1;
        cout<<"头节点删除成功!"<<endl;
        return;
        }
        if (p1->num==num)
        {
            p2->next=p1->next;
            delete p1;
            cout<<"节点删除成功!"<<endl;
            return;
        }
        p1=p2->next;
    }

}
int main()
{
    book *head=NULL;
    head=creat();
    showbook(head);
    int num;
    cout<<"请输入删除书籍的编号:";
    cin>>num;
    Delete(head,num);
    showbook(::head);//如果不加::,程序在删除头节点的时候就会崩溃,这是为什么?
    return 0;
}
搜索更多相关主题的帖子: price false return public include 
2013-06-07 10:49
NewYear
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2013-5-14
收藏
得分:0 
主函数中showbook(::head);//如果不加::,程序在删除头节点的时候就会崩溃,第一个showbook却可以正常执行,这是为什么?
2013-06-07 10:51
justlxy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:158
注 册:2013-5-14
收藏
得分:5 
主函数中showbook(::head);表示使用全局变量中的head,而不是主函数中的head。
2013-06-07 22:29
快速回复:请指点一下这个程序的问题
数据加载中...
 
   



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

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