关于while(cin)的问题

LBWANDWC 2016-10-16 08:16:07
一直不知道while(cin)是什么意思,网上给的回答也是众说纷纭,因此烦请各位帮我看一下以下代码的意思:
代码一:
for (i = 0; i < ArSize; i++)
{
cout << i+1 << ": ";
cin.get(temp, MaxLen);
while (cin && cin.get() != '\n')
continue;
if (!cin || temp[0] == '\0') // empty line?
break; // i not incremented
else
sayings[i] = temp; // overloaded assignment
}
int total = i; // total # of lines read
代码二:
istream & operator>>(istream & is, String & st)
{
char temp[String::CINLIM];
is.get(temp, String::CINLIM);
if (is)
st = temp;
while (is && is.get() != '\n')
continue;
return is;
}
...全文
492 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-10-17
  • 打赏
  • 举报
回复
while(cin) =====> while(!cin.fail()) //while the stream is OK
如果你把一个basic_ios类的对象(cin就是)放到while语句的括号里,它就会被转换成void*型。如果输入失败的话,就会得到一个空指针(也就是0),那么while语句就不能通过。
http://blog.csdn.net/gtatcs/article/details/8774880
paschen 版主 2016-10-16
  • 打赏
  • 举报
回复
cin对象可以隐式转换为void*,如果输入流有错误,转换后是NULL,会退出循环
LBWANDWC 2016-10-16
  • 打赏
  • 举报
回复
希望您能说一下代码的意思,这样有助于我理解
ipqtjmqj 2016-10-16
  • 打赏
  • 举报
回复
cin的类型为std::istream, 而while中需要一个布尔型的值,所以这涉及到类型转换, std::istring类即std::basic_istream<char>, std::basic_istream的基类std::basic_ios有一个成员函数 c++11之前是operator void*() const; 之后是explicit operator bool() const; c++11之前返回的是NULL,会隐式转成false,非NULL则是true。 而返回值是等价于!std::basic_ios::fail(), 而std::basic_ios::fail()是根据基类std::ios_base::iostate的的failbit与badbit两个标志相或得到
ztenv 版主 2016-10-16
  • 打赏
  • 举报
回复
最好的办法是建议你看看cin的使用说明,cppreference上

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧