流结束符Ctrl+Z

int _tmain(int argc, _TCHAR* argv[])
{
list<string> slst;
string  str;  

cout << "Enter some strings for the list:" << endl;

while(cin >> str)
slst.push_back(str);

cin.clear(); //使输入流重新处于有效状态

cout << "Enter a string that you want to delete:" << endl;
cin >> str;

for(list<string>::iterator iter = slst.begin(); iter != slst.end();)
{
if(*iter == str)
{
iter = slst.erase(iter);
}
else
{
++iter;
}


for(list<string>::iterator iter = slst.begin(); iter != slst.end(); ++iter)
cout << *iter << endl;

return 0;

}

在DOS命令行模式下,随意输入几个字符串,“Hello”, "world", "ni", "hao"输入完毕后,输入Ctrl + Z,然后输入回车,再输入Ctrl + Z,最后再输入回车,提示输入要删除的字符串,输入“hao”后,并没有删除而是显示hello world ni hao->  这是什么原因?

经过搜集资料,原来输入流结束的条件就是行首键入 Ctrl+Z 并回车,所以第一次输入的Ctrl+Z虽然也在回车之前,但是没有在行首,所以并不是输入流的结束符,而是被当做最后一个字符串的一部分,显示为hao->,所以没有能够删除掉字符串"hao"。

正确的做法是,先输入“Hello”, "world", "ni", "hao",然后回车(这个回车的作用是使后面输入的Ctrl+Z处在下一行的行首位置),输入Ctrl+ Z后再输入一个回车(这个回车的作用是告诉cmd.exe流输入结束了)。这样就可以了。 

 输入缓冲是行缓冲。当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,cin.get() 就会检测 输入缓冲区中是否有了可读的数据。cin.get() 还会对键盘上是否有作为流结束标志的 Ctrl+Z 或者 Ctrl+D 键 按下作出检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值