看C++ primer,一直在郁闷一个问题

yangyu0806 2005-01-20 04:50:13
书里面经常出现这样的写法
string text;
while(cin >> text)
dosomething(text);

这个循环好像不能结束的说
...全文
455 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw1a2 2005-01-24
  • 打赏
  • 举报
回复
说Ctrl+Z的朋友试过在XP下的效果吗
qufan 2005-01-24
  • 打赏
  • 举报
回复
老话重提哈
cin在出现eof和格式不匹配的时候结束哈
vanter 2005-01-24
  • 打赏
  • 举报
回复
ctrl+z 真老
achengzz 2005-01-23
  • 打赏
  • 举报
回复
学习!
liuxuyu 2005-01-22
  • 打赏
  • 举报
回复
引"还是改成自己认为合理的写法吧,这本书的自由度很高,也是这本书的优点,书中的题目也是这样的呀"

呵呵,我觉得也是这样,自己想清楚的问题才叫学明白了东西!~~~~~~~
lw1a2 2005-01-22
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
string buf,word;
while(cin>>buf)
{
if (buf==";")break;
word=buf;
}

cout<<word<<endl;

system("pause");
}
cyfdecyf 2005-01-21
  • 打赏
  • 举报
回复
应该是编译器的问题。
看见你用"void main"我猜你用的是VC吧?VC下编译我也是输入2次crtl-z才推出,用g++时只要输入1次就行。
cbofnh 2005-01-21
  • 打赏
  • 举报
回复
说的好精辟。
zhengguoshan 2005-01-21
  • 打赏
  • 举报
回复
都说了,帮头帮着顶一下up
tip9914 2005-01-21
  • 打赏
  • 举报
回复
int main()
{
string str;
int i=0;
char c;
// c='\n';

while(cin)
{
if(cin.get()=='\n')
break;
cout<<i<<endl;
i++;

}
这样可以实现课本上的等待输入。。
自己研究一下就知道应该怎样了
yangyu0806 2005-01-21
  • 打赏
  • 举报
回复
有没有明白的关注以下这里呀
SmartWhidbey 2005-01-21
  • 打赏
  • 举报
回复
这是伪代码。再说,可以结束的了。CIN接受一个空格的时候,就会跳出来的。我的。
qufan 2005-01-21
  • 打赏
  • 举报
回复
我嘿真是粗心啊
我一直以为他们写的是伪码捏
所以自己改了改
没想倒这个问题呵呵
study兼顶了
flamingheart 2005-01-20
  • 打赏
  • 举报
回复
对亚,我试了也是这样,怎么回事啊?
dddd1234 2005-01-20
  • 打赏
  • 举报
回复
哈哈,和我问的问题一样呀

“daylove(爱晶如梦)(昨夜西风调碧树,独上高楼,望尽天涯路……)” 说的那个我早就看过了,但是XP下就是会出现^Z。

现在只能用if (str==";") break;来跳出循环,但是有的程序本身就是考察的这方面的问题,再用它就不适合了
yangyu0806 2005-01-20
  • 打赏
  • 举报
回复
我明白什么意思了,所以做个小例子去测试了一下,但是又发现一个问题
程序是这样的
#include <string>
#include <iostream>
using namespace std;

void main()
{
string str;
while(cin >> str)
cout<<str<<endl;
cout<<"ok";
}

输出结果:
abc回车
abc
tttt回车
tttt
^Z(这个输入就是ctrl+Z)
^Z
ok

为什么我第一次输入ctrl+Z之后没有反应,我第二次再输入的时候才退出啊
xuelong_zl 2005-01-20
  • 打赏
  • 举报
回复
还是改成自己认为合理的写法吧,这本书的自由度很高,也是这本书的优点,书中的题目也是这样的呀
avalonBBS 2005-01-20
  • 打赏
  • 举报
回复
ctrl-z
daylove 2005-01-20
  • 打赏
  • 举报
回复
用什么方法结束输入循环while(cin)?

新近大家见到的C++书籍中,常见的输入循环类似while(cin){}或者while(cin>>ch){}等类似的形式,大多数书籍中并没有特别的指出该循环的结束条件,导致程序执行时无法结束循环。

实际上,这个循环结构并不像想象中的那样是一个死循环,只需要通过简单的输入EOF(End of File,文件结束标志)即可。

从标准输入设备输入EOF是一个平台相关的问题:

1)在DOS/WINDOWS平台下,使用PC键盘ctrl-z可以输入EOF;

2)在Linux平台下,在标准的默认设置下,使用PC键盘ctrl-d同样可以输入EOF。(然而,由于Linux下键盘的布局似乎可以重新定义,我不是Linux的专家,可以自行查阅帮助页进一步确认是否存在这种特殊情况。)

3)对于非PC键盘,例如UNIX的字符终端,不排除没有ctrl键的可能性,同样需要查阅系统手册确认如何输入EOF,一般情况下,退出shell(logout)的热键使用EOF。

这个方法的依据在于std::basic_ios<>(它是istream的基类)设计了一个void*和bool的隐式转型,从而使流的状态可以直接用作条件表达式,

template < class Ch, class Tr = char_traits < Ch > >
class basic_ios : public ios_base
{
public:
// ...
bool fail() const; // 测试状态,下一次操作将失败

operator void* () const { return !fail(); }
bool operator! () const { return fail(); }
// ...
};

因此,如果cin处于错误状态,那么上述循环将结束。导致输入流状态错误的情况有很多种,得到EOF作为输入是其中的一种,发生设备错误也是一种(例如和键盘设备通信中断)。

特别是,输入无效的数据也会导致输入流错误,然而要求输入字符串和字符的情况下,所有的键盘输入都是合法的,因而在这里并不能用来结束循环。因此输入EOF成了合法的结束循环的唯一选择。

yangyu0806 2005-01-20
  • 打赏
  • 举报
回复
cin方法怎样返回空啊-_-!!
加载更多回复(2)

64,676

社区成员

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

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