C ++文件输入问题

时间:2011-08-27 00:20:56

标签: c++

嗨,大家好!我有以下代码:

#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;
}

和names.in文件输入:

5
CLEOpatra
AISHWARYA rai
jOHn f. KeNNeDy
leonardo DA Vinci
tyleR durdeN

当我编译并运行它时,首先打印空行,name_vec [0]为空行。任何人都可以解释为什么以及如何解决它?

1 个答案:

答案 0 :(得分:6)

问题在于您将>>运算符与getline的调用混合在一起。通常,您希望使用其中一个,但不能同时使用它们。

你在向量中得到一个空字符串的原因是因为>>不会消耗导致它停止的空格。也就是说,它会读取"5",在其后面找到换行符,然后停止,将换行符保留在ifstream中。

然后,对getline的调用遇到换行符并立即说:“完成!我读了一行!”。它使用换行符并返回导致它的整个字符串 - 在本例中为空字符串。

如果您知道您的数据格式正确(没有无效输入),最简单的方法就是使用>>来读取整个文件。否则,我建议使用getline一次读取每一行,然后使用stringstream对象来解析数据。

修改

我刚刚注意到你输入的其余部分有以空格分隔的名/姓。由于>>在空格上停止,因此使用getline读取整个文件可能最简单。阅读5

的示例
string line;
getline(fin, line);

stringstream converter;
converter << line;

int n;
converter >> n;