cin的根本问题?

wpalhm 2007-09-28 09:54:11
都说cin、cout为标准输入、输出流!那么多流怎么理解?

这样一个语法,不是很明白:
while(std::cin)
{
std::cin >> str; //前面已经声明string str
}
这里的语法是流状态的检查。请问怎么让流处于错误状态的。有怎么恢复正确状态。
如果我在上面的代码后加
std::cout << str;
再次输出string对象时,无法再次输出。

谁能给我一个流清楚的理解。很模糊!
谢谢
...全文
178 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wpalhm 2007-09-28
  • 打赏
  • 举报
回复
谢谢。十分感谢!
taodm 2007-09-28
  • 打赏
  • 举报
回复
回车-ctrl_z/F6-回车。VC6的话可能还需要再加一次ctrl_z-回车
wpalhm 2007-09-28
  • 打赏
  • 举报
回复
vc控制台下。输入ctrl+c窗口就自动关闭了?把我搞糊涂了。。。
uoyevoli 2007-09-28
  • 打赏
  • 举报
回复
另外我在 XP 系统 VS2005 中实验,如下代码可以在 Ctrl + Z 和 Ctrl + C 时正常退出循环:

while(std::cin)
{
std::cin >> str; //前面已经声明string str
}
uoyevoli 2007-09-28
  • 打赏
  • 举报
回复
输入 Ctrl + C
wpalhm 2007-09-28
  • 打赏
  • 举报
回复
谢谢你的详细讲解。但是我还是有点模糊。就这样的代码怎么退出循环
while(std::cin >> str, !std::cin.eof())
{
std::cout << str; //前面已声明std::sting str
}
我在这里始终卡着走不出来。为什么输入了ctrl+z后,还跳不出循环呢?比如下面的代码就不能执行了。
ckt 2007-09-28
  • 打赏
  • 举报
回复
大概如此,具体看书

cin或cout对象包含一个描述流状态的数据成员.
流状态由三个io_base元素组成:eofbit,badbit,failbit,每个元素都是一位
可以是1(设置)或者是0(清除).
当cin操作到达文件末尾时,它将设置eofbit
当cin操作未能读取到与其的字符时或试图读取不可访问的文件,写入保护的磁盘,
将设置failbit.一些无法诊断的失败破坏流时,badbit元素将被设置.
当3个状态为设置为0时,说明一切顺利,程序可以检查流状态.
eof()如果eofbit被设置,则返回ture
fail()如果failbit被设置,则返回ture
bad()如果badbit或者failbit被设置,则返回ture
设置状态(两种方法)
clear();默认参数0,这时候将清除全部三个状态位.
clear(eofbit);将状态设置为eofbit,即eofbit将被设置,其他两个状态位被清除
setstate();只是影响到参数中设置已设置的位.
setstate(eofbit);将设置eofbit,而不会影响到其他位,如果failbit被设置,
则还是被设置.
wpalhm 2007-09-28
  • 打赏
  • 举报
回复
谢谢解答。只是我很久以来都被这个问题困惑。十分感谢你的回答。

taodm 2007-09-28
  • 打赏
  • 举报
回复
去看看《C++ Primer》关于流的章节,知道点基础知识再来问吧。
不可能在csdn上什么都讲的。
wpalhm 2007-09-28
  • 打赏
  • 举报
回复
给自己顶一下

64,647

社区成员

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

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