C++ getline()未填充整个字符串数组

C++ getline()未填充整个字符串数组,c++,visual-c++,C++,Visual C++,我编写这段代码是为了从控制台输入中读取N行,并将其放入字符串数组中,但它是 读N-1行 有什么建议吗 #include<iostream> #include<stdio.h> #include<string> using namespace std; int main() { int test; cin>>test; string *cases=new string[test]; for(int i=0;i<test;i++) {

我编写这段代码是为了从控制台输入中读取N行,并将其放入字符串数组中,但它是 读N-1行 有什么建议吗

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

int main()
{
int test;
cin>>test;
string *cases=new string[test];
for(int i=0;i<test;i++)
{
    getline(cin,cases[i],'\n');
}

for(int i=0;i<test;i++)
{
    cout<<cases[i]<<endl;
}

system("pause");
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
智力测验;
cin>>试验;
字符串*案例=新字符串[测试];

对于(int i=0;i让我们假设您的输入如下:

2\n
line 0\n
line 1\n
然后在
cin>>测试之后
,顶部有一条空行:

\n
line 0\n
line 1\n
使用
>
只读取它感兴趣的位(即
int
),然后在流中留下任何其他内容(在本例中,只读取
\n
,但仔细想想,可能会有各种各样的内容)。
getline
读取到
\n
的所有内容,然后从流中删除
\n
。 因此,在第一个
getline
之后,剩余的输入是:

line 0\n
line 1\n
案例[0]
包含
(即空字符串)

然后在下一个
getline
之后:

remaining input:
line 1\n

然后循环停止,因为它已读取2行。 这就是问题所在。修复它是另一回事。我更喜欢避免混合
>
getline
。但是您可以做一些事情来清除流中的尾部
\n

编辑:您也可以好好阅读一下(文档可能有点技术性——搜索教程)和

我提出了一种解决方法。注意,只有c++11。如果您没有可用的方法,您可以尝试使用
>
,或

#包括
#包括
#包括
int main()
{
int inLines=0;
//std::cin>>内联线;
std::字符串计数行;
std::getline(std::cin,countLine);
尝试
{
inLines=std::stoi(计数线);
}
捕获(…)
{

std::cout给出一个示例输出,解释什么是错误的它是
>
getline
的组合。输入
int
后,该行的其余部分(实际上可能不包含任何内容)将被读入
案例[0]
。我总是发现最简单的方法就是不要混合使用
>
getline
。感谢您解释这个问题,我用scanf(“%d\n”,&test)修复了它);有更好的方法吗?我添加了一种可能的方法。使用
scanf
解决了这个特殊问题,但基本上仍然意味着您混淆了输入方法,这可能会造成麻烦。再次感谢您对我的帮助^_^
cases[0]: ""
cases[1]: "line 0"
#include <iostream>
#include <vector>
#include <string>
int main()
{
    int inLines = 0;
    //std::cin >> inLines;
    std::string countLine;
    std::getline(std::cin, countLine);
    try
    {
        inLines = std::stoi(countLine);
    }
    catch (...)
    {
        std::cout << "First line must be an integer\n";
        return 1;
    }
    std::vector<std::string> lines(inLines);

    for (int i = 0; i < inLines; ++i)
    {
        std::getline(std::cin, lines[i]);
    }

    for ( auto & s : lines )
    {
        std::cout << s << '\n';
    }
    return 0;
}