如何使用 cin 继续读取,直到到达空行

How to keep reading using cin until a blank line is reached

提问人:Zhengxi Tan 提问时间:1/8/2017 最后编辑:Zhengxi Tan 更新时间:1/8/2017 访问量:2924

问:

我正在尝试使用标准输入(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);
    }
  }
}
C++ STL IOSTREAM CIN

评论

0赞 Kerrek SB 1/8/2017
“不工作”是什么意思?更努力地解释你的问题。
0赞 Zhengxi Tan 1/8/2017
对不起,我已经编辑了包含问题的帖子。

答:

2赞 Kerrek SB 1/8/2017 #1

提取不会提取换行符(换行符是空格,因此下一次调用会提取空行。cin >> my_num;getline

解决此问题的替代方法:

  1. 始终使用基于行的字符串提取和从属字符串流。

  2. 用于吞噬空格。std::cin >> my_num >> std::ws

  3. 用于吞噬一个换行符。std::cin.ignore(1, '\n')

  4. 使用虚拟调用来吞噬一个换行符。std::getline(std::cin, current_word)