zoukankan      html  css  js  c++  java
  • cin.good(),cin.fail(),cin.clear()

    cin.good(),原来的值默认为1。如果输入的值与定义的变量类型不同,则输出cin.good()为0;

     1 int a;
     2 cout<<"输入一个字母:"<<endl;
     3 cin>>a; //我们用键盘输入一个char字母,而不是输入int。这时int型变量中放了char型数据,发生错误,所以failbit置1
     4 cout<<"cin.fail()="<<cin.fail()<<endl; //输出1,说明fail是true,代表出错。
     5 cout<<"输入一个数字:"<<endl; //由于failbit值为1,输入流不能正常工作
     6 cin>>a; //此时我们用键盘输入,但是此处的输入无效,因为cin.fail是true。
     7 cout<<a<<endl; //输出不确定值,因为刚才cin>>a都没有效果。所以内存a这个区域不知道是什么值。
     8 cin.clear(); //此处用cin.clear()这个函数进行流标志复位,使得cin.fail恢复正常。 
     9 cout<<"cin.fail()="<<cin.fail()<<endl; //此处failbit已为0,说明fail是false,即没有错误了。
    10 cout<<"输入一个数字:"<<endl;
    11 //由于上面的步骤仅仅是清除了fail错误,但刚才第一次输入的char字符并没有从流中清除,那个char类型的东西还存在在缓冲区内,所以当再次进行cin>>a时,又把那个char字符放入变量a中,类型不符导致输入流又不能正常工作,cin.fail再次崩溃为true。
    12 cin>>a;
    13 cout<<a<<endl; //还是没有输入成功,因此输出a的话还是输出不确定值
    14 cout<<"cin.fail()="<<cin.fail()<<endl; //由于刚才缓冲区的错误,所以在此处failbit又为1true
    15 cin.clear(); //用clear方法再次修复输入流
    16 cin.ignore(); //这次我们用ignore方法取走刚才流中的字符,也就是让缓冲区的那个char字符清除。
    17 cout<<"输入一个数字:"<<endl; //再次接收输入,这次输入int型的数字,类型和变量符合,所以正常输出了
    18 cin>>a;
    19 cout<<"a="<<a<<endl;
    20 //现在再看一下输入流的failbit
    21 cout<<"cin.fail()="<<cin.fail()<<endl;//输出0,表明输入流已恢复正常

    代码引用自 yinlung 的CSDN 博客 

  • 相关阅读:
    用Python完成一个汇率转换器
    鸿蒙如何用JS开发智能手表App
    鸿蒙如何用JS开发智能手表App
    SAP Spartacus SplitViewComponent Migration 的一个具体例子
    SAP Spartacus B2B 页面 Popover Component 的条件显示逻辑
    SAP Spartacus 升级时关于 schematics 的更新
    SAP Spartacus B2B 页面 Disable 按钮的显示原理
    SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
    通过 Feature Level 动态控制 SAP Spartacus 的页面显示
    SAP Commerce Cloud Build Manifest Components
  • 原文地址:https://www.cnblogs.com/gc612/p/9743413.html
Copyright © 2011-2022 走看看