永发信息网

c++一个简单的问题

答案:2  悬赏:0  手机版
解决时间 2021-05-06 13:45

#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;
string str;
p1=new book; // 以下三句为什么不和下面的while循环放在一起?

head=p1;
p2=p1;
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->num=atoi(str.c_str());
if (p1->num!=0)
{
cout<<"请输入图书的价格"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->price=atof(str.c_str());
}
else
{
delete p1;p2=NULL;p2->next=NULL;return head;
}
while (p1->num!=0)
{
p2=p1; //这里为什么p2又要指向p1?
p1=new book; //为什么又要申请内存给p1?
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->num=atoi(str.c_str());
if (p1->num!=0)
{
cout<<"请输入图书的价格"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->price=atof(str.c_str());
}
p2->next=p1;
}
delete p1;
p2->next=NULL;
return head;
}
void show_creat(book*head)
{
cout<<endl;
cout<<"信息如下:"<<endl;
while(head)
{
cout<<"图书编号:"<<head->num<<'\t';
cout<<"图书价格:"<<head->price<<endl;
head=head->next;
}
}
int main()
{
book *head=NULL;
head=creat();
show_creat(head);
return 0;
}
先谢谢各位高手帮忙,小弟感激

最佳答案

#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;
string str;
p1=new book; // 以下三句为什么不和下面的while循环放在一起?
//在循环检查的时候是检查输入的数据,所以要在循环前面添加一条输入,用于循环的初始判断.
head=p1;
p2=p1;
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->num=atoi(str.c_str());
if (p1->num!=0)
{
cout<<"请输入图书的价格"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->price=atof(str.c_str());
}
else
{
delete p1;p2=NULL;p2->next=NULL;return head;
}


while (p1->num!=0)
{
p2=p1; //这里为什么p2又要指向p1? p2指向了p1,表示把p2移到了下一个元素p1,在循环中的用意。
//是因为p1要用于新增加的元素,而类book是链表形式,所以要用p2在下面p1申请到空间后p2->next 指到新的p1,把2者连系起来
//,在循环中一直这样下去,就可以建立一条不断的链表
p1=new book; //为什么又要申请内存给p1? 一直在新建空间是为了满足用户输入的需要,只有在用户输入了0才结束,所以要一直申请空间
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->num=atoi(str.c_str());
if (p1->num!=0)
{
cout<<"请输入图书的价格"<<endl;
cin>>str;
while(!check(str))
{
cout<<"输入错误,请从新输入"<<endl;
cin>>str;
}
p1->price=atof(str.c_str());
}
p2->next=p1;
}
delete p1;
p2->next=NULL;
return head;
}



void show_creat(book*head)
{
cout<<endl;
cout<<"信息如下:"<<endl;
while(head)
{
cout<<"图书编号:"<<head->num<<'\t';
cout<<"图书价格:"<<head->price<<endl;
head=head->next;
}
}
int main()
{
book *head=NULL;
head=creat();
show_creat(head);
return 0;
}



//你可以找下数据结构的书籍看下,这个就是链表.的结构.

全部回答
好像C++都要含main函数
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎样在城市生存?
我右边肋骨底下痛
鼻子一酸就流鼻涕
手腕有旧伤,如何痊愈?
找一部动画片的名字……
被蜜蜂蛰了怎么办?
别人搬家怎么祝福短信,好朋友女儿做手术祝福
梦到同学,并在梦里留下了联系方式
喀什哪地方招天工或者短期工
qq宠物社区 哪里有元宝送啊
联讯电脑科技怎么去啊,有知道地址的么
QQ飞车商城里买东西送不是好友的可以吗?
保险公司的工资是怎么算的?
死神动画出到多少集了?
央企一年赚多少钱
推荐资讯
关于对她的宠爱,溺爱
遂宁何时有机场
跑跑人物动态(神秘工人)头像
咋近休闲区
购买成都到重庆动车车票用学生证可否打折?
欧亚便利店怎么去啊,有知道地址的么
眼睛发炎能用滴眼露吗
吴江市人民医院
晚上做了梦,梦到被牛咬了,意味着什么?
帮我看一下免疫检查报告单
谁 能 帮我点亮 QQ爱墙 的图标 重分悬赏 加非
瑞星有修复网页的功能吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?