自己再代码中用getline读取文件时只能读取首行,这个问题困扰了我很久,最开始我以为是函数没有识别换行,任然再第一行读取东西,但这个行getline这个函数的基本功能就相悖了,在稍作测试后我就换了其他思路,转向其他方向。
void ReadMan(list<Gtman> &Gtm,char *filename)
{
ifstream ifile(filename,ios::in);
if (ifile.fail())
{
exit(0);
}
int arr[7];
char buff[20];
for (int i = 0;i < 100;i++)
{
for (int j = 0;j < 7; j++)
{
ifile.getline(buff,4,',');
arr[j] = atoi(buff);
}
Gtman man(arr);
Gtm.push_back(Gtman(man));
}
ifile.close();
}
在了解getline()内核机制时我注意到,getline函数对于长度超过参数限定时就会自己设置一个无效位,无效位后的文件内容就不会读取到这也是为什么不能读取后面内容的原因。修改后代码如下:
void ReadMan(list<Gtman> &Gtm,char *filename)
{
ifstream ifile(filename,ios::in);
if (ifile.fail())
{
exit(0);
}
int arr[7];
char buff[20];
for (int i = 0;i < 100;i++)
{
for (int j = 0;j < 7; j++)
{
ifile.getline(buff,4,',');
ifile.clear();
arr[j] = atoi(buff);
}
Gtman man(arr);
Gtm.push_back(Gtman(man));
}
ifile.close();
}
希望这次的经历总结可以帮到和我遇到相同情况的同学。