while循环执行到一半不执行了,大神帮忙看看

sinat_30330131 2017-07-12 12:58:17

#include<iostream>
#include<vector>
#include<string>

using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::cin;
int main()
{
vector<string>vec;
string str;
cout << "Print a string: ";
while(cin >> str)
vec.push_back(str);
for (auto & a : vec)
cout << a << " ";
return 0;
}


单步调试,假设我输入“I am ed”,vec可以压入,size变为3,但再按下F10立马调试就结束了,下面所有信息也没有了,我用的是VS2012,请问这是什么情况?
...全文
595 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_30330131 2017-07-13
  • 打赏
  • 举报
回复
引用 7 楼 fight_in_dl 的回复:
只有按下ctrl + z,才会发送一个EOF,此时方结束循环。
OK 非常感谢!
战在春秋 2017-07-13
  • 打赏
  • 举报
回复
只有按下ctrl + z,才会发送一个EOF,此时方结束循环。
战在春秋 2017-07-13
  • 打赏
  • 举报
回复
引用
想问一下,cin>>str最后读入ed以后不就到string的文件尾了吗
哪儿来的 "文件" ? 题目是从终端接收输入,程序中只要有循环,就要考虑到如何退出, while(cin >> str)的退出方式就是答案中说的按 ctrl + z。 如果有条件,上机运行一下,就会有直观的感受。
sinat_30330131 2017-07-13
  • 打赏
  • 举报
回复
引用 1 楼 fight_in_dl 的回复:
没有输出是因为while循环没有结束,仍在等待输入。 解决办法是按下ctrl + z (Windows系统),或者 ctrl + d (Unix系统)。 或者修改代码如下:
while (cin >> str)
	{
		if (str == "exit")
		{
			break;
		}
		vec.push_back(str);
	}
程序运行如下图:
想问一下,cin>>str最后读入ed以后不就到string的文件尾了吗,循环讲道理不是应该跳出吗。。
赵4老师 2017-07-12
  • 打赏
  • 举报
回复
Windows:Enter、Ctrl+Z、Enter Linux:Ctrl+D
棉猴 2017-07-12
  • 打赏
  • 举报
回复
使用getchar()函数

	char ch;
	while (cin >> str)
	{
		vec.push_back(str);
		if ((ch = getchar()) == '\n')
			break;
	}
战在春秋 2017-07-12
  • 打赏
  • 举报
回复
没有输出是因为while循环没有结束,仍在等待输入。

解决办法是按下ctrl + z (Windows系统),或者 ctrl + d (Unix系统)。

或者修改代码如下:
while (cin >> str)
{
if (str == "exit")
{
break;
}
vec.push_back(str);
}


程序运行如下图:
kakabulusi 2017-07-12
  • 打赏
  • 举报
回复
没有退出,是个死循环。。 新手常见问题。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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