• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > C++开发 > 简单图书链表的实现(二)字符判断

    简单图书链表的实现(二)字符判断

    作者: 分类:C++开发 点击: 2,155 次
    wordpress CMS主题:ssmay主题

      前面,我们实现了图书链表的创建及显示,我们可以简单地创建图书信息。但是,细心的话,我们会发现一个问题的存在,就是在输入图书编号或价格时,如果我们不小心输入的是字符或其它,而不是数字,就会出现死循环。碰到这种问题,应该怎样解决呢?

      解决方法:我们需要判断用户输入的是不是数字,如果是数字就执行,如果不是数字并且不是小数(价格一般带小数点),那么就不执行而是返回到原始位置。基于这个思路,我们需要定义一个判断函数,函数代码如下:

      bool check(string str)   //定义一个返回bool值的check函数,它的形参是一个字符串

      {

      for(int i=0;i<str.length();i++) //循环小于字符串长度,遍历字符串的每一个字母

      {

      if((str[i]<'0'||str[i]>'9')&&str[i]!='.') //字符串的每个字母小于0或大于9,并且为是小数点的话

      return false;   //就返回假

      }

      return true;

      }

      然后在用户输入的地方修改一下,修改后的代码如下(标红的部分是我们修改的代码):

      book *create()

      {

      book*p1,*p2;

      p1=new book;

      p2=p1;

      head=p1;

      string str;  //声明一个字符串变量

      cout<<"请输入图书的编号,以0结束";

      cin>>str;

      while(!check(str)) //如果不是数字,就执行大括号里的语句

      {

      cout<<"你输入的不是数字,请重新输入,以0结束";

      cin>>str;

      }

      p1->num=atoi(str.c_str()); //将字符串型转换成整型

      if(p1->num!=0)

      {

      cout<<"请输入图书的价格";

      cin>>str;

      while(!check(str))

      {

      cout<<"你输入的不是数字,请重新输入,以0结束";

      cin>>str;

      }

      p1->price=atof(str.c_str());  //将字符串型转换成浮点型

      }

      else

      {

      delete p1;p2=NULL;head=NULL;return head;

      }

      while(p1->num!=0)

      {

      p2=p1;

      p1=new book;

      cout<<"请输入图书的编号,以0结束";

      cin>>str;

      while(!check(str))

      {

      cout<<"你输入的不是数字,请重新输入,以0结束";

      cin>>str;

      }

      p1->num=atoi(str.c_str());

      if(p1->num!=0)

      {

      cout<<"请输入图书的价格";

      cin>>str;

      while(!check(str))

      {

      cout<<"你输入的不是数字,请重新输入,以0结束";

      cin>>str;

      }

      p1->price=atof(str.c_str());

      }

      p2->next=p1;

      }

      delete p1;

      p2->next=NULL;

      return head;

      }

      同时,我们还要在头部添加一句:#include <string>  这样,代码中的字符串才能正常使用,否则就会报错。



      QQ二维码

    文章作者:高时银博客
    本文地址:http://wanlimm.com/7720140118920.html
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    This site uses Akismet to reduce spam. Learn how your comment data is processed.