社区
C++ 语言
帖子详情
下面这个代码中,输入浮点数,为什么第二次cin.fail()才为true?
aikill
2008-04-08 07:41:17
#include<iostream>
using namespace std;
void main()
{
int i=0;
int inval=0;
for (i=1; i<4; i++)
{
cin>>inval;
if (cin.fail())
{
cin.ignore();
cin.clear();
}
}
cout<<inval<<endl;
}
...全文
289
21
打赏
收藏
下面这个代码中,输入浮点数,为什么第二次cin.fail()才为true?
#include using namespace std; void main() { int i=0; int inval=0; for (i=1; i>inval; if (cin.fail()) { cin.ignore(); cin.clear(); } } cout<<inval<<endl; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taodm
2008-04-09
打赏
举报
回复
楼主现在应该明白高手和低手就区别在这“试一试”上了。
wangya55
2008-04-09
打赏
举报
回复
en
aikill
2008-04-09
打赏
举报
回复
呵呵,向高手学习,主要是想弄清楚原理,光是试一试还是不够。
aikill
2008-04-08
打赏
举报
回复
class sentry {
public:
explicit sentry(_Myt& _Is, bool _Noskip = false)
: _Ok(_Is.ipfx(_Noskip)) {}
operator bool() const
{return (_Ok); }
private:
bool _Ok;
};
bool ipfx(bool _Noskip = false)
{if (good())
{if (tie() != 0)
tie()->flush();
if (!_Noskip && flags() & skipws)
{const _Ctype& _Fac = _USE(getloc(), _Ctype);
_TRY_IO_BEGIN
int_type _C = rdbuf()->sgetc();
while (!_Tr::eq_int_type(_Tr::eof(), _C)
&& _Fac.is(_Ctype::space,
_Tr::to_char_type(_C)))
_C = rdbuf()->snextc();
_CATCH_IO_END }
if (good())
return (true); }
setstate(failbit);
return (false); }
_Myt& ignore(streamsize _N = 1, int_type _Di = _Tr::eof())
{iostate _St = goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);
if (_Ok && 0 < _N)
{_TRY_IO_BEGIN
for (; ; )
{int_type _C;
if (_N != INT_MAX && --_N < 0)
break;
else if (_Tr::eq_int_type(_Tr::eof(),
_C = rdbuf()->sbumpc()))
{_St |= eofbit;
break; }
else
{++_Chcount;
if (_C == _Di)
break; }}
_CATCH_IO_END }
setstate(_St);
return (*this); }
分析了一下istream,果然是goodbit时,ignore才起作用。
知其然,而知所以然,呵呵,自己动手,丰衣足食。
ryfdizuo
2008-04-08
打赏
举报
回复
同意ls,
aikill
2008-04-08
打赏
举报
回复
一和二都是的。
提问只是想深层次的探讨一下,如果都只是试一下而已,那么也只是肤浅的理解。
高手和新手的区别在哪里?难道仅仅是因为喜欢试一下吗。
论坛如果只是回答是与不是的地方,那么还不如自己掷色子来看结果了,反正别人只回答是与不是也不明白为什么。
呵呵,就事论事,不是攻击谁。
就呆在云上
2008-04-08
打赏
举报
回复
单步执行一下就可以了
如果输入2.0
第一次可以读到一个2
第二次就是一个.
然后调用cin.ignore();cin.clear(); 涮洗缓冲区,里面就啥都没有了
打印就是2
但是如果输入一个s字符
就直接
cin.ignore();
cin.clear();
打印的就是0
taodm
2008-04-08
打赏
举报
回复
浮点的开头部分是整数!!!
Supper_Jerry
2008-04-08
打赏
举报
回复
你也可以输入2a3,是一样的,只要是前面有数字,cin就会读入。但是当读入第一个后
缓冲区中就整数可以读入了。所以cin就fail了。
hurryboylqs
2008-04-08
打赏
举报
回复
哦,没看清楚,其实你已经描述的很清楚了,
如果你第一次就是输入浮点数,比如 2.3 那么这个2是能够被cin读到缓冲区里的,所以第一次不会出现非法,第二次遇到.时就非法了
aikill
2008-04-08
打赏
举报
回复
第一次输入浮点数后,fail不为真,然后下一次循环中就不能输入了,而且fail为真了。
那么既然出错,为什么不是在当次循环中出错,而是要到下一次循环。
hurryboylqs
2008-04-08
打赏
举报
回复
你问题描述的不清楚,总之你这个代码要求输入3个整数,每次输入都判断是不是合法输入,如果输入不合法就
cin.fail()为真啦
aikill
2008-04-08
打赏
举报
回复
控制台程序。
hurryboylqs
2008-04-08
打赏
举报
回复
你是怎么输入的?
zgjxwl
2008-04-08
打赏
举报
回复
[Quote=引用 11 楼 aikill 的回复:]
有两个问题:
一、
cin.ignore(); 默认情况下只清除一个字符?
二、
cin.fail();为true时,使用cin.ignore()没有用?
[/Quote]
多自己试试兄弟,引用taodm的一句话
节省别人的时间就是再提高自己,好好理解理解这句话
lsmdiao0812
2008-04-08
打赏
举报
回复
学习
taodm
2008-04-08
打赏
举报
回复
[Quote=引用 11 楼 aikill 的回复:]
有两个问题:
一、
cin.ignore(); 默认情况下只清除一个字符?
二、
cin.fail();为true时,使用cin.ignore()没有用?
[/Quote]
自己写代码试一下就知道了。
jieao111
2008-04-08
打赏
举报
回复
2)没听说过
jieao111
2008-04-08
打赏
举报
回复
1)是的
aikill
2008-04-08
打赏
举报
回复
有两个问题:
一、
cin.ignore(); 默认情况下只清除一个字符?
二、
cin.fail();为true时,使用cin.ignore()没有用?
加载更多回复(1)
c++编写简单计算器
在C++编程语言
中
,创建一个简单的计算器程序是一项基础任务,它可以帮助初学者理解基本的
输入
输出、控制流程以及操作符优先级等概念。在这个项目
中
,我们将关注以下几个关键知识点: 1.
输入
输出:C++使用`std::
cin
...
2023年面向对象程序设计.docx
插入运算符是左结合的,允许在一个语句
中
连续使用多次。 9. 流状态管理:`clear()`函数用于清除流的状态标志,比如`
fail
bit`。然而,调用`clear()`并不意味着流立即变得可用,除非同时清除了导致失败的错误。 10. ...
cpp
代码
-
输入
流 请高手指点一下
在C++编程
中
,
输入
流(Input Stream)是处理数据
输入
的重要组成部分,它允许程序员从各种源(如键盘、文件、网络等)读取数据。本文将深入探讨C++
中
的
输入
流,包括基本概念、常见类库以及如何使用它们进行实际编程。...
c++期末实验复习题
根据给定的文件信息,我们可以总结出以下几个C++编程知识点: ### 1. 计算圆的面积 **
代码
示例:** ```cpp #include #include using namespace std; int main() { double r, area;
cin
>> r; area = 3.1416 * r...
cin
将小数
输入
给整形变量(
cin
>>float to int)
首先关于
输入
的几个基本概念:...
cin
有一个函数叫做
fail
(),如果
cin
读取的过程
中
出现错误,
cin
.
fail
()就会返回
true
。而且,在此之后的
cin
>>都会因为
cin
.
fail
()==
true
而不被执行。除非使用
cin
.clear()来清除这个错
C++ 语言
65,206
社区成员
250,519
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章