在整数后获取多个字符串输入?

Getting multiple string input after integer?

我遇到了这个编程问题,我需要在输入一个整数后输入多个字符串。 该字符串还包括空格。

//程序

#include <iostream>
#include<string.h>
using namespace std;

int main() {
int t;
cin>>t;
while(t--){
    string s;
    getline(cin,s,'\n');  //also used cin>>s;
    cout<<"$"<<s<<"$"<<'\n';
}
return 0;
}

输入

2
Hello World
Hello Whosebug

预期输出

Hello World
Hello Whosebug

程序的输出

$$$Hello World$

这里的问题是 std::cin >> t; 不会消耗输入中出现的 \n。这就是为什么第一次调用 std::getline 会读取所有内容,直到下一个 \n 立即出现(这样 s 在第一次迭代期间是空字符串)。

您可以通过两种方式解决此问题。不碰代码,调整输入为

2 Hello World
Hello Whosebug

但我想这不是本意。另一种方法是告诉 std::cin 忽略下一个换行符之前的所有内容,例如

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

在遇到下一个 \n 之前,它可能会吃掉大量字符。对于上面的编译,你需要 #include <limits>.