提问人:Zhengxi Tan 提问时间:1/8/2017 最后编辑:Zhengxi Tan 更新时间:1/8/2017 访问量:2924
如何使用 cin 继续读取,直到到达空行
How to keep reading using cin until a blank line is reached
问:
我正在尝试使用标准输入(cin)来读取输入,直到命中空行。我尝试了很多次,但仍然未能实现。谁能帮我?
以下是输入格式。注:
1. // 是注释
2.注释可以随机分布在输入的第二行之后。因此,我还需要清除这些评论。不知道该怎么做。
3.第一行必须是单个字母。
4.第二行必须是整数。
A
8
good
great
amazing
wonderful wonderful
fantastic fantastic
/
/这些是一些随机评论
,太棒了,天才
,stackoverflow
以下是我现在所拥有的。我正在尝试使用 getline,但程序只读取前两行(字母和数字)。然后程序结束。不知道出了什么问题:
void read() {
vector<string> my_vec;
char my_letter;
cin >> my_letter;
int my_num
cin >> my_num;
string current_word;
while (getline(cin, current_word)) {
if (current_word.empty()) {
break;
}
if (current_word[0] != '/' ) {
my_vec.push_back(current_word);
}
}
}
答:
2赞
Kerrek SB
1/8/2017
#1
提取不会提取换行符(换行符是空格,因此下一次调用会提取空行。cin >> my_num;
getline
解决此问题的替代方法:
始终使用基于行的字符串提取和从属字符串流。
用于吞噬空格。
std::cin >> my_num >> std::ws
用于吞噬一个换行符。
std::cin.ignore(1, '\n')
使用虚拟调用来吞噬一个换行符。
std::getline(std::cin, current_word)
评论