嗨,大家好!我有以下代码:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define MAXN 301
string names[MAXN];
vector<string> names_vec;
int main(int argc, char **argv)
{
ifstream fin(argv[1]);
int n;
fin>>n;
string line;
while(getline(fin, line))
names_vec.push_back(line);
for(int i=0; i<names_vec.size(); i++)
cout<<names_vec[i]<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和names.in文件输入:
5
CLEOpatra
AISHWARYA rai
jOHn f. KeNNeDy
leonardo DA Vinci
tyleR durdeN
Run Code Online (Sandbox Code Playgroud)
当我编译并运行它时,首先打印空行,name_vec [0]为空行.任何人都可以解释为什么以及如何解决它?
问题是你正在将>>操作员与调用混合getline.通常,您希望使用其中一个,但不能同时使用它们.
你在向量中得到一个空字符串的原因是因为>>不会消耗导致它停止的空格.也就是说,它读取"5",找到后面的换行符,然后停止,将换行符保留在ifstream.
然后,getline遇到换行符的调用立即说:"完成!我读了一行!".它使用换行符并返回导致它的整个字符串 - 在本例中是空字符串.
如果您知道数据格式正确(没有无效输入),则最简单的方法就是>>用来读取整个文件.否则,我建议使用一次getline读取每一行,然后使用stringstream对象解析数据.
编辑
我只是注意到你输入的其余部分有以空格分隔的名/姓.由于>>在空格上停止,因此最简单的方法是使用它getline来读取整个文件.阅读示例5:
string line;
getline(fin, line);
stringstream converter;
converter << line;
int n;
converter >> n;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |