#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;
}
先谢谢各位高手帮忙,小弟感激