Eclipse CDT EOF信号输入 问题,求大神下凡

最近在学习C++,发现Eclipse中的EOF信号输入有问题,使用Ctrl+Z输入,会导致整个程序直接terminated, 与 命令行的 EOF信号输入有出入。

查询Eclipse Keys,确定EOF确实可以在I/O控制台输入EOF信号,见下图:


附上代码:

void testList(void){
	list<string> slst;
	string str;

	//读入list对象
	cout << "Enter some strings(Ctrl+Z to end):" << endl;
	while(cin>>str){
		slst.push_back(str);
	}
	cin.clear();		//使得流重新处于有效可输入状态

	//读入需要寻找的值
	cout << "Enter a string that you want to find:" << endl;

	cin>>str;

	cout << "需要删除的字符为" << "-----" << str << "-----" << endl;

	cout << "输入结束,打印删除后的结果:" << endl;

	//处理str对象,删除list中与str相同的元素
	for(list<string>::iterator iter=slst.begin(); iter!=slst.end(); ++iter){
		if(*iter == str){
			iter=slst.erase(iter);		//删除元素并更新迭代器
			--iter;		//使迭代器回退
		}else{
			cout << *iter << ", ";
		}
	}
}

运行时,在控制台中输入完内容之后,立马输入Ctrl+Z,程序就会terminated掉,见下图:



若在输入完内容之后,再输入一个Enter,然后才输入EOF,则程序的结果如下:



这个情况,在命令行中运行时,是不会出现的。我们来分析下这个情况:


cin是istream类的对象,它是从标准输入设备(键盘)获取数据,程序中的变量通过流提取符">>"从流中提取数据。流提取符">>"从流中提取数据时跳过输入流中的空格、tab键、换行符等空白字符。注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓存区,形成输入流,提取运算符">>"才能从中提取数据。(百度百科)




第一种情况,因为没有输入回车,故cin无法提取到数据,slst容器为空,但是,程序仍然跳过了后面的 cin>>str语句,不等待用户输入。

第二种情况,依然输入了回车,几个单词也存储到了slst容器中,while循环之后,str的值为最后一个单词,但是程序仍然跳过了cin>>str语句,不等待用户输入,执行到后面的for循环,将旧的str作为需要删除的内容,从而把slst的最后一个元素 you 删除掉了。


我的工程运行配置中,如下图:


Connect process input & output to a terminal 选项灰色不可勾选或取消,,求解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值