练习数据结构时,当创建链表时需要输入数据域的内容,也即在create()函数中用到了cin,create()中的cin是以while(cin)来检测cin的状态作为循环的终止,但是当多次调用create()时,只有第一次完全输入正确,以后的要么就是不等待输入,要么就是输入的和得到的不匹配。

思考了一下,觉得是cin的问题,因为第一次输入完成,也即遇到一个输入使得cin返回false,但是这个输入依然保留在cin中,并未被刷新,于是在每次while(cin)前加上了cin.clear(),问题依旧。上网查到是要添加cin.ignore(),加上试了下,果然好了。

于是查了一下,cin.clear()和cin.ignore();

http://www.cplusplus.com/给的解释分别如下:

std::istream::ignore:

Extracts characters from the input sequence and discards them, until either n characters have been extracted, or one compares equal to delim.就是说它会丢弃原本在输入流中的内容,直到遇到一个

delimiter(定界符)。

对应于我的例子,就是将第一次输入中最后一个用来标识结束的字符丢弃掉。从而输入就正常了。

ios::clear

Sets a new value for the stream's internal error state flags.也就是将流的所有状态都重设为有效状态。

对应于我的例子,就是将上一次的cin重设为有效。

好吧。虽然很简单,但是不注意的话会导致不明原因的bug,浪费宝贵的时间来调试。所以还是值得注意一下的。

顺便贴一下我用单链表实现的多项式相加:

//单链表的应用
//-------------
//多项式相加
//每个多项式为一个单链表,链表数据域为系数和指数
//多项式的相加可抽象为两个单链表的Merge操作#include <iostream>
using namespace std;typedef struct LNode
{float coef;  //系数int expn;  //指数LNode* next;
}LNode,*List;void createList(List& L)
{float coef;int expn;L=(List)malloc(sizeof(LNode));L->next=NULL;LNode* q=L;while((cin>>coef)!=NULL){ cin>>expn;LNode* p=(LNode*)malloc(sizeof(LNode));p->coef=coef;p->expn=expn;p->next=q->next;q->next=p;q=q->next;}
}void visit(float f,int i)
{cout<<"coef: "<<f<<" "<<"expn: "<<i<<endl;
}void ListTraverse(List L,void (*visit)(float,int))
{L=L->next;while(L!=NULL){visit(L->coef,L->expn);L=L->next;}
}void add(List& polyA,List& polyB,List& result)
{LNode* pa=polyA->next;LNode* pb=polyB->next;LNode* pc=polyA;result=polyA;while(pa!=NULL&&pb!=NULL){if(pa->expn<pb->expn){pc->next=pa;pc=pc->next;pa=pa->next;}else if(pa->expn>pb->expn){pc->next=pb;pc=pc->next;pb=pb->next;}else{pa->coef+=pb->coef;pc->next=pa;pc=pc->next;pa=pa->next;LNode* tmp=pb;pb=pb->next;free(tmp);}}if(pa==NULL)pc->next=pb;if(pb==NULL)pc->next=pa;
}int main()
{List polyA,polyB;createList(polyA);ListTraverse(polyA,visit);cin.clear();cin.ignore();cout<<"----------------------"<<endl;createList(polyB);ListTraverse(polyB,visit);List result;cout<<"-----------------------"<<endl;add(polyA,polyB,result);ListTraverse(result,visit);system("pause");
}

使用cin时遇到的一些错误与解决相关推荐

  1. 启动Jupyter Notebook时出现Kernel error错误的解决方法

    启动Jupyter Notebook时出现Kernel error错误的解决方法 方法如下: 1.打开Anaconda Prompt,然后输入jupyter kernelspec list,查看一下 ...

  2. win10系统远程连接时发生身份验证错误的解决方法

    win10系统远程连接时发生身份验证错误的解决方法 解决这个问题有2个方法,百度了很久找到的: 1.在当前提示错误的电脑上操作,运行输入gpedit.msc 进入[打开组策略,依次展开"计算 ...

  3. php服务器连接错误,运行PHP文件时出现内部服务器错误的解决方法

    运行PHP文件时出现内部服务器错误的解决方法 发布时间:2020-11-20 18:06:51 来源:亿速云 阅读:101 作者:Leah 这期内容当中小编将会给大家带来有关运行PHP文件时出现内部服 ...

  4. linux出现e325错误,用Vim编辑文件时出现E325: ATTENTION错误的解决方法

    用Vim编辑文件时出现E325: ATTENTION错误的解决方法 当用Vim编辑一个文件时出现下列错误 [root@zabbix ~]# vim /usr/local/msmtp/etc/msmtp ...

  5. VS2019运行OpenGL时出现的常见错误及解决办法

    OpenGL程序在低版本的VS中运行成功,但在VS2019中运行却出现各种错误,以下是常见错误的解决办法.(文章结尾有库的链接哟~) 问题一:无法打开文件"glaux.lib" 解 ...

  6. linux用户登录身份验证错误,启动 WLS 时的身份验证错误(解决linux下问题)

    The WebLogic Server did not start up properly. Reason: weblogic.security.SecurityInitializationExcep ...

  7. 【VM Ware】虚拟机安装XP系统时,出现546错误的解决办法

    引言: 现在的windows操作系统对旧版本的软件兼容性非常差,很多老软件无法在win10下运行,因此我们需要建立虚拟机来运行老版软件.可是我们通过虚拟机安装XP系统时,有时候会出现546错误.经过本 ...

  8. 安装sqli-labs出现错误_【沙发管家】智能电视安装APK时“解析包出现错误”如何解决?...

    很多用户在看电视的时候都会遇到智能电视&机顶盒安装软件过程中,偶尔会遇到解析包出现错误的提示,小编就向技术人员咨询,究竟是什么原因会造成解析包错误的情况,今天小编搜集了相关资料帮助大家解答,整 ...

  9. 安装apk文件时的常见的错误及解决方法

    1.INSTALL_FAILED_INVALID_APK:无效的安装包,安装包已损坏  请检查安装包是否完整.如果是xpk包,可以通过手动安装xpk来检测一下.如果是apk包,请重新下载.  2.IN ...

最新文章

  1. 2010年基于Linux的10大技术趋势
  2. 刷前端面经笔记(十二)
  3. virtualenv在windows10下面使用的注意事项
  4. Java偏向锁、轻量级锁、重量级锁
  5. wgs84转经纬度_wgs84经纬度转为cgcs2000平面坐标
  6. 实现石头剪刀布获胜法_用java实现一个猜拳小游戏
  7. moead算法流程步骤_匈牙利算法原理与实现
  8. C语言字符串操作总结大全(超详细)
  9. 中文语句分词 -- HanLP词性
  10. 从机器学习谈起 (转)
  11. linux系统下回收站,Linux怎么开启回收站功能
  12. 用计算机语言说我累了,我累了,真的好累(读到心酸)
  13. 云计算:程序员重回个人英雄时代
  14. DOS命令:comp
  15. 学习如逆水行舟,只有坚持不断的学习,才能保持进步!我置顶了这些公众号
  16. 数据库 之带子查询的操作--插入子查询结果、带子查询的修改语句、带子查询的删除语句
  17. 如何快速打开北京健康宝小程序?
  18. protobuf根据有关联的.proto文件进行编译
  19. 群英传android,三国群英传官方网站-腾讯游戏-三国SLG手游新王者
  20. 敏捷神话1:“敏捷是一种方法论”

热门文章

  1. pdf按照页码分割 java_java使用itext按页码拆分pdf文件详解
  2. Mesh networking----下层传输层(Lower Transport Layer)
  3. android h xh xxh 分辨率,android vector入门
  4. java生成md5校验码_如何用java获取ftp服务器上文件的md5校验码?
  5. 2019上半年软考网络工程师考试下午真题及分析
  6. 路由器显示不安全网络连接到服务器地址,无线网显示不安全网络怎么解决?
  7. 2022-2-21 Leetcode 1221.分割平衡字符串
  8. 计算机基础知识宣讲心得体会,有关计算机基础的心得体会
  9. Java项目:Springboot快递物流管理系统
  10. 查看APP的UI布局的工具