我正在帮助朋友完成一个关于读取文件并打印它的简单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
感谢您的一切!
答案 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