getline()没有填充整个字符串数组
getline() not filling the whole string array
我写这段代码是为了从控制台输入中读取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;
}
假设您的输入如下:
2n
line 0n
line 1n
然后在cin>>test
之后,顶部有一条空行:
n
line 0n
line 1n
使用>>
只读取它感兴趣的比特(即int
(,然后在流上留下任何其他东西(在这种情况下,只有n
,但仔细想想,线上可能有各种各样的东西(。getline
读取直到n
的所有内容,然后从流中删除n
。因此,在第一个getline
之后,剩余的输入是:
line 0n
line 1n
并且CCD_ 9包含CCD_。
然后在下一个getline
:之后
remaining input:
line 1n
和
cases[0]: ""
cases[1]: "line 0"
然后循环停止,因为它已经读取了2行。这就是问题所在。修复它是另一回事。我更喜欢避免混合>>
和getline
。但你可以做点什么来清除流中的尾随n
。
编辑:您还可以阅读std::vector(该文档可能有点技术性——搜索教程(和using namespace std;
的害处
我提出了一种修复方法。注意stoi
只是c++11。如果你没有,你可以试试stringstream
和>>
,或者atoi
。
#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 integern";
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;
}
相关文章:
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组