C++ 输入ctrl+z 不能再使用cin的问题
问题介绍: 程序步骤是开始往容器里面写数据,以Ctrl+Z来终止输入流,然后需要输入一个数据,来判断容器中是否有这个数据。
源代码如下:
#include<iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
int main()
{
map<string,vector<int> >my_map;
string word;
string word_to_find;
vector<int> ivec;
while(cin >> word)
my_map[word].push_back(); cout << "input a string you want to find:" << endl; cin >> word_to_find;
map<string,vector<int> >::iterator it = my_map.find(word_to_find);
if(it != my_map.end())
{
vector<int>::iterator it_vec = (it->second).begin();
cout << it->first << endl;
for(it_vec;it_vec != (it->second).end(); it_vec++)
cout << *it_vec << " ";
cout << endl;
}
}
当在第12行输入ctrl+z终止输入流的时候,第17行的cin语句是失效的,应该是ctrl+z(文件结束符)默认程序是不再需要输入的,所以后面的cin语句就是失效的。
cin语句为什么会失效?
显然,直观的感受是ctrl+z引起cin失效。这里牵扯到一个概念:条件状态。IO标准库管理一系列条件状态(condition state)成员,用来标记给定的IO对象是否处于可用状态,或者碰到了哪种特定的错误。
每个IO类定义了三个iostate类型的常量值,分别表示特定的位模式。badbit标志着系统级的故障,如无法恢复的读写错误。如果出现了该类错误,则此流通常不能再用了。如果出现的是可恢复的错误,如在希望获得数值型数据时输入了字符,此时设置failbit标志。eofbit是在遇到文件结束符时设置的,此时同时设置了failbit。流的状态由bad,fail,eof,good操作揭示。任意一个为true,则检查流本身将显示该流处于错误状态。
经检验,运行上述代码,failbit设置为TRUE,而eofbit是为false,按理来说ctrl+z是文件结束符(不太确定),eofbit是为true的。
要使流重新生效,可调用流的clear方法。这里使用cin.clear().
#include<iostream>
#include<map>
#include<string>
#include<vector>
using namespace std;
int main()
{
map<string,vector<int> >my_map;
string word;
string word_to_find;
vector<int> ivec;
while(cin >> word)
my_map[word].push_back(); cin.clear(); // 更改cin的状态标示符
cin.sync(); // 清除缓存区的数据流
cout << "input a string you want to find:" << endl; cin >> word_to_find;
map<string,vector<int> >::iterator it = my_map.find(word_to_find);
if(it != my_map.end())
{
vector<int>::iterator it_vec = (it->second).begin();
cout << it->first << endl;
for(it_vec;it_vec != (it->second).end(); it_vec++)
cout << *it_vec << " ";
cout << endl;
}
}
C++ 输入ctrl+z 不能再使用cin的问题的更多相关文章
- getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析
2013-07-18 21:35:58 getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析. char是字符型数 ...
- C++ 对Ctrl+Z的解释
只有当Ctrl+Z单独位于一行的行首时,才表示输入的终止!(即无论何时,都推荐先回车,再Ctrl+Z,再回车结束输入) 当Ctrl+Z位于行中.行末时,输入都不会结束. (Ctrl+Z表示一个字符,其 ...
- fg、bg、jobs、&、nohup、ctrl + z命令
fg.bg.jobs.&.nohup.ctrl + z命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如gftp &, 二.ctrl + z 可以将一个正在前台执 ...
- Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别(转)
一.后台进程管理命令 fg.bg.jobs.&.ctrl + z.ctrl + c.ctrl + \.ctrl + d1. &加在一个命令的最后,可以把这个命令放到后台执行 ,如fir ...
- Linux学习笔记(16)Linux前后台进程切换(fg/bg/jobs/ctrl+z)
关键词:Linux前后台进程切换,linux进程切换 fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& ...
- c++中while(cin>>str)和ctrl z的相关问题探讨
对于while (cin>>str)和ctrl z的问题,网上有以下解释: -------------------------------------------------------- ...
- 关于按下ctrl+z后,之后的cin失效的问题
下面这代码按下Ctrl+z结束while输入后,接下来的cin >> val2就无法输入了 #include <iostream> #include <vector> ...
- C++中标准输入流cin与Ctrl+Z使用时的问题
今天使用C++编写了一段小程序,练习使用标准库的算法,代码如下: #include <iostream> #include <algorithm> #include <v ...
- linux中ctrl+z、ctrl+d和ctrl+c的区别
ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.ctrl+c是强制中断程序的执行,而ctrl+z的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用f ...
随机推荐
- Manacher以及回文树算法学习
Manacher以及回文树算法学习 一.Manacher 关于\(Manacher\),这篇博客 讲的很清楚. 大致总结一下 为了将长度为奇数的回文串和长度为偶数的回文串一起考虑,需要在原字符串中插入 ...
- Codeforces Round #508 (Div. 2) D. Slime
D. Slime 题目链接:https://codeforces.com/contest/1038/problem/D 题意: 给出两个数,然后每次可以对相邻的两个数合并,比如x,y,那么合并过后就是 ...
- 牛客328B Rabbit的工作(1)
传送门:https://ac.nowcoder.com/acm/contest/328/B 题意:给你n和k,和一个长度为n的字符串,字符串中的0表示休息,1表示工作,连续工作会损耗连续的体力值,从1 ...
- Mac 访问隐藏文件方法! 网上方法在我电脑上都不可用!
百度的方法: 如果你想打开整个系统的隐藏文件可以在终端下输入以下命令 defaults write com.apple.finder AppleShowAllFiles -bool true 关闭显示 ...
- getQueryString----获取url中得参数
/** * 获取url中得参数 * @param name * @returns {null} */ window.getQueryString = function (name) { var reg ...
- python---aiohttp的使用
1.aiohttp的简单使用(配合asyncio模块) import asyncio,aiohttp async def fetch_async(url): print(url) async with ...
- You can't specify target table 'table' for update in FROM clause
delete from table1 where ID not in(select max(ID) ID from table1 group by row1) and row1 ) # 出现错误 # ...
- 洛谷 P1976 鸡蛋饼
题目背景 Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟.经过一番逼问,小 x 道出 了实情:因为他喜欢圆. 题目描述 最近小 x 又发现了一个关于圆的有趣的问题:在圆上有2N 个不同的点 ...
- [Luogu 3966] TJOI 2013 单词
经典ACAM. 注意单词之间添加字符,以及对重复单词的处理. #include <cstdio> #include <cstring> #include <queue&g ...
- Spring Boot 启动报错:LoggingFailureAnalysisReporter
17:57:19: Executing task 'bootRun'... Parallel execution with configuration on demand is an incubati ...