没有得到正确的输出读取c ++中的文件

时间:2014-12-27 13:21:03

标签: c++ iostream fstream

我正在帮助朋友完成一个关于读取文件并打印它的简单c ++任务,这里是代码:

#include<iostream>
#include<cstdlib>
#include<fstream>

using namespace std;
const int P=10;
struct persona
{
    string nombre;
    int puntos;
};
typedef persona vec[P];


int main (void)
{

    ifstream f;
    vec v;
    int i;

    f.open("estadisticas2.txt");
    if(!f)
    cout<<"Error abriendo fichero\n";
    else
    {
        for(i=0;i<P;i++)
        {  
            getline(f,v[i].nombre);
            f >> v[i].puntos;
            f.ignore(); 

        } 
         f.close(); 
        for(i=0;i<P;i++)
         {
            cout<<v[i].nombre<<"\n";
            cout<<v[i].puntos<<"\n";
        }

    }
    system("pause");
    return 0;
}      

我检查了是否有关于不读取或for循环不正常的问题。还初始化了向量v,但我只得到了这个输出:

unknown 
0
pene
20
ojete
40
tulia
240

0

1875655176

0

16

-1

1875658144

Insted of(真正的.txt值):

unknown 
0
pene
20
ojete
40
tulia
240 
Ano 
2134
lolwut
123
unknown 
0 
unknown 
0 
unknown 
0 
unknown 
0                                                                                                                                                                                                                            

感谢您的一切!

2 个答案:

答案 0 :(得分:1)

您的f.ignore()帐户丢弃了一个字符,您认为是新行,但在您的输入文件中:

unknown 
0
pene
20
ojete
40
tulia
240 <=== here
Ano 
2134
lolwut
123
unknown 
0 <=== here
unknown 
0 <=== here
unknown 
0 <=== here
unknown 
0 <=== here

上面标记的所有地方都有一个尾随空格一个尾随换行符。要在提取数字后使用所有,您应该使用:

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

将丢弃输入流中的所有内容,包括下一个换行符,从而占用空间并保持线相对位置不变。

作为旁注,您还应该检查您的IO操作以获取getline和数字提取。

答案 1 :(得分:0)

{
  getline(f, v[i].nombre);
  string l;
  getline(f, l);
  v[i].puntos = stoi(l);
}

不知道为什么你的例子不起作用,但我不喜欢将getline与>>混合 您也忘了加入string