关于string的读取问题

yuanweihuayan 2012-04-21 06:55:04
程序源码如下:
string str;
while ( cin>>str )
{
cout<<str;
}
运行结果如下:
1 //用户输入1
12 //用户输入2
23 //用户输入3
3^Z //用户输入ctrl+z
请按任意键继续. . .

这样看起来程序没有啥问题.
但如果用户一次性输入:1 2 3 ^z(即ctrl+z)时,程序并没有按照预计的那样输出123,然后退出程序.
而是输出123,然后等待用户在此输入,等待用户输什么呢?ctrl+z?
开始我认为是程序并没有读取到^z,再键入^z,此时用户输出->标记然后退出.
这不是很奇怪吗?
理论上我一次性输入1 2 3 ^z 后程序就会依次读取字符(以空格分隔).当读取到^z时,发现文件已经结束了.
这个问题怎么解释呢?
...全文
305 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanweihuayan 2012-05-15
  • 打赏
  • 举报
回复
顶起啊.别沉了.
yuanweihuayan 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
楼主,首先,ctrl+z要两次;第二,输入1 2 3时,输出不会有空格的,因为cin输入string时有两点注意:
1、读取并忽略开头所有的空白字符(包括空格,换行符,制表符)
2、读取字符,直至再次遇到空白字符,读取终止。
基于以上两点,不会读入空格,也就不会输出了
[/Quote]
这好像和空白符没有关系呢?
yuanweihuayan 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
C/C++ code

input: 123^Z(回车)
结束符被忽略

input: 123(回车)
input: ^Z(回车)
有效
[/Quote]
按照输入情况,你说的能解释的通,可问题就在于为什么结束符会忽略呢?
我爱吃火锅 2012-05-06
  • 打赏
  • 举报
回复
楼主,首先,ctrl+z要两次;第二,输入1 2 3时,输出不会有空格的,因为cin输入string时有两点注意:
1、读取并忽略开头所有的空白字符(包括空格,换行符,制表符)
2、读取字符,直至再次遇到空白字符,读取终止。
基于以上两点,不会读入空格,也就不会输出了
main_jj 2012-05-06
  • 打赏
  • 举报
回复
第一个ctrl+z被忽略了
想结束得 回车 再 ctrl+z 回车
vim_remember 2012-05-06
  • 打赏
  • 举报
回复

input: 123^Z(回车)
结束符被忽略

input: 123(回车)
input: ^Z(回车)
有效
yuanweihuayan 2012-05-06
  • 打赏
  • 举报
回复
继续顶起啊!!!!!
yuanweihuayan 2012-04-23
  • 打赏
  • 举报
回复
顶起啊.别沉了....
yuanweihuayan 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用楼主 的回复:
程序源码如下:
string str;
while ( cin>>str )
{
cout<<str;
}
运行结果如下:
1 //用户输入1
12 //用户输入2
23 //用户输入3
3^Z //用户输入ctrl+z
请按任意键继续. . .

这样看起来程序没有啥问题.
但如果用户一次性输入:1 2 3 ^z(即ctrl+z)时,程序并没有按……
[/Quote]你没有加头文件吧?
straing 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
程序源码如下:
string str;
while ( cin>>str )
{
cout<<str;
}
运行结果如下:
1 //用户输入1
12 //用户输入2
23 //用户输入3
3^Z //用户输入ctrl+z
请按任意键继续. . .

这样看起来程序没有啥问题.
但如果用户一次性输入:1 2 3 ^z(即ctrl+z)时,程序并没有按照预计的那样输出123……
[/Quote]

楼主,我怎么编译这代码就有错啊,只有把 string str; 改为int str或者 char str[10];后才能运行呢?
yuanweihuayan 2012-04-21
  • 打赏
  • 举报
回复
而且为什么第一次的^z没有读取到?
yuanweihuayan 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
引用 1 楼 的回复:
windows?
再输入一次 ^z

操作系统时windows,我在输入一次^z程序输出->

就是 这样.
忘了是bug还是什么原因了.
反正输入两次肯定可行
[/Quote]
可是问题就在于为什么会输出->
evencoming 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
windows?
再输入一次 ^z

操作系统时windows,我在输入一次^z程序输出->
[/Quote]
就是 这样.
忘了是bug还是什么原因了.
反正输入两次肯定可行
yuanweihuayan 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
windows?
再输入一次 ^z
[/Quote]
操作系统时windows,我在输入一次^z程序输出->
evencoming 2012-04-21
  • 打赏
  • 举报
回复
windows?
再输入一次 ^z

65,187

社区成员

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

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