注册 登录
编程论坛 C++教室

谁看下我错哪了,一开始输入0后就出错!!peach5460在吗,给分的机会到了

hjb5074 发布于 2013-04-06 15:52, 520 次点击
#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]<'0'||str[i]>'9' )&& (str[i]!='.'))
        {
   
            return false;
        }
    }
    return true;
}

book * creat()
{
   
    book * pone;
    book * ptwo;
    pone=new book;
    ptwo=pone;
    head=pone;
    cout<<"输入图书编号以0结束"<<endl;
    string str;
    cin>>str;
    while (!check(str))
    {
        cout<<"你输入的不是数字,请输入数字"<<endl;
        cin>>str;
    }
    pone->num=atoi(str.c_str());
        
    if(pone->num!=0)
    {
        cout<<"请输入图书的价格:"<<endl;
            cin>>str;
    while (!check(str))
    {
        cout<<"你输入的不是数字,请输入数字"<<endl;
        cin>>str;
    }
    pone->price=atof(str.c_str());
   
    }
    else
    {
        delete pone;ptwo=NULL;ptwo->next=NULL;head=NULL;return head;
    }
    while (pone->num!=0)
    {
      ptwo=pone;
      pone=new book;
      cout<<"输入图书编号以0结束"<<endl;
      cin>>str;
    while (false==check(str))
    {
        cout<<"你输入的不是数字,请输入数字"<<endl;
        cin>>str;
    }
    pone->num=atoi(str.c_str());
    if(pone->num!=0)
    {
        cout<<"请输入图书的价格:"<<endl;
        cin>>str;
    while (false==check(str))
    {
        cout<<"你输入的不是数字,请输入数字"<<endl;
        cin>>str;
    }
    pone->price=atof(str.c_str());
   
    }
   

   
    }

        delete pone;            
        pone->next=NULL;
        return head;
}
int main()
{
    creat();
    return 0;
}
要讲清楚呦,本人比较笨的
9 回复
#2
peach54602013-04-06 19:06
干嘛指明找我?
自己调试一下嘛...
#3
peach54602013-04-06 19:21
一开始就输入0的话,代码运行到这里来了
        delete pone;
        ptwo=NULL;
        ptwo->next=NULL;
        head=NULL;
        return head;

pttwo都为null了,还怎么ptwo->next=NULL;
#4
peach54602013-04-06 19:34
另外说一句,代码重复太多了,精简一下
#5
邓士林2013-04-06 21:26
if ((str[i]<'0'||str[i]>'9' )&&(str[i]!='-'))你想判断是不是数字,不用这样吧!而且'.'不对吧!c_str()函数返回一个指向正规C字符串的指针,int atoi(const char *nptr);
函数说明: 参数nptr字符串,如果第一个非空格字符存在,并且,如果不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
#6
hjb50742013-04-07 10:24
以下是引用peach5460在2013-4-6 19:06:31的发言:

干嘛指明找我?
自己调试一下嘛...
已经把你列为,专职导师了,呵呵呵呵
#7
hjb50742013-04-07 10:30
回复 5楼 邓士林
我用'.'是想检测输入的不是不是带小数点的数值
#8
peach54602013-04-07 10:34
以下是引用hjb5074在2013-4-7 10:30:53的发言:

我用'.'是想检测输入的不是不是带小数点的数值

他说的这个情况我没试过,你说输入0挂了,我就看了一下,的确挂了
就说了一下...

至于字符串转数字,你转错了吗?
我没看咧

友情送你个正则
^[+-]?([\\d]+([\\.][\\d]*)?)([Ee][+-]?[\\d]+)?$

[ 本帖最后由 peach5460 于 2013-4-7 10:40 编辑 ]
#9
hjb50742013-04-08 18:31
以下是引用peach5460在2013-4-7 10:34:41的发言:

 
他说的这个情况我没试过,你说输入0挂了,我就看了一下,的确挂了
就说了一下...
 
至于字符串转数字,你转错了吗?
我没看咧
 
友情送你个正则
^[+-]?([\\d]+([\\.][\\d]*)?)([Ee][+-]?[\\d]+)?$
c++字符串用c_str()转换成c字符串,再用atoi转换成数字,没错呀
#10
peach54602013-04-08 18:55
以下是引用hjb5074在2013-4-8 18:31:59的发言:

c++字符串用c_str()转换成c字符串,再用atoi转换成数字,没错呀

其实你的检测是错的
比如3.2.1明显不是小数,你的check会返回true
1