读取C++中的空行

6
我有困难阅读和区分输入中的空行。
这是样例输入:
 number

 string
 string
 string
 ...

 number

 string
 string
 ...

每个数字代表一个输入的开始,字符串序列后面的空行代表一个输入的结束。字符串可以是一个短语,不仅限于单词。
我的代码执行以下操作:
  int n;

  while(cin >> n) { //number

    string s, blank;
    getline(cin, blank); //reads the blank line

    while (getline(cin, s) && s.length() > 0) { //I've tried !s.empty()
        //do stuff
    }
  }

我尝试直接使用cin >> blank,但是它没有起作用。
有人能帮我解决这个问题吗?
谢谢!

你可以直接从 cin 读取序列,因为它会忽略所有空格。所以不需要读取空格。 - Diffy
1个回答

9
在您阅读此行后的数字:
while(cin >> n) { //number

cin在读取完最后一位数字之后不会读取任何其他字符。这意味着cin的输入缓冲区仍然包含数字所在行的其余部分。因此,您需要跳过该行和下一个空行。您可以通过使用两次getline来实现。即:

while(cin >> n) { //number

    string s, blank;
    getline(cin, blank); // reads the rest of the line that the number was on
    getline(cin, blank); // reads the blank line

    while (getline(cin, s) && !s.empty()) {
        //do stuff
    }
  }

1
不是因为 getLine() 在遇到空格字符时停止吗?所以第一个 getLine() 将消耗空格字符,第二个 getLine() 将消耗空行。无论如何,给出的解决方案都是正确的。 - Diffy
为什么连续输入数字时不会导致 cin 错误,只有在最后一个数字输入完成后,才会将空字符串传递给下一个 cin?例如,如果我连续三次使用 cin >> n,然后使用 cin >> string,那么字符串将为空,但之前的 cin 没有触发错误。 - Mampac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接