C++关于用ifstream来读取txt数据赋值给一个结构体对象和数组的问题
如下:ifstreamifs("cityinfo.txt");inti=0;intj=0;while(i<3){ifs>>city[i].CityID>>city[i]....
如下:
ifstream ifs("cityinfo.txt");
int i=0;int j=0;
while(i<3)
{
ifs>>city[i].CityID>>city[i].CityName;
for(j=0;j<3;j++)ifs>>arc[i][j];
i++;
}
其中结构体有两个成员变量city.CityID和city.CItyName
另外还有一个二维数组数组arc[3][3]表示储存的是两城市之间的里程数,
cityinfo里面数据的格式为:
001 北京 0 1000 1200
002 上海 1000 0 300
003 南京 1200 300 0
我写的上面那个代码可以实现这个功能,但是数据量肯定不只三个城市,要求可以设置一个arc[maxsize][maxsize]的数组,比如arc[100][100],
但假设我的cityinfo里面只有50个城市的信息,数组读取数据部分怎样自动读取50个数据啊,
我知道外层循环while可以改成while(ifs),但是里面的循环怎么控制?(不能是for (j=0;j<50;j++)噻,因为默认是不知道的嘛,也就是说,怎样判断一行已经读完,然后进入下一行读取,可以设置截止符号)
拜托了!!! 展开
ifstream ifs("cityinfo.txt");
int i=0;int j=0;
while(i<3)
{
ifs>>city[i].CityID>>city[i].CityName;
for(j=0;j<3;j++)ifs>>arc[i][j];
i++;
}
其中结构体有两个成员变量city.CityID和city.CItyName
另外还有一个二维数组数组arc[3][3]表示储存的是两城市之间的里程数,
cityinfo里面数据的格式为:
001 北京 0 1000 1200
002 上海 1000 0 300
003 南京 1200 300 0
我写的上面那个代码可以实现这个功能,但是数据量肯定不只三个城市,要求可以设置一个arc[maxsize][maxsize]的数组,比如arc[100][100],
但假设我的cityinfo里面只有50个城市的信息,数组读取数据部分怎样自动读取50个数据啊,
我知道外层循环while可以改成while(ifs),但是里面的循环怎么控制?(不能是for (j=0;j<50;j++)噻,因为默认是不知道的嘛,也就是说,怎样判断一行已经读完,然后进入下一行读取,可以设置截止符号)
拜托了!!! 展开
1个回答
展开全部
如果你的数据文件格式比较严谨的话(不随意空格,不随意换行)
那么有2个方案(个人设想):
其一,先预读一行(按字符读入一个够大的数组),统计其中的空格数,空格数减1就是每行需要读取的数据个数。(大概可以用getline来处理)
其二,预先获取整个文件的总行数(=城市个数)。代码是网上Ctrl+V来的
int CountLines(char *filename)
{
ifstream ReadFile;
int n=0;
char line[512];
ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
if(ReadFile.fail())//文件打开失败:返回0
{
return 0;
}
else//文件存在
{
while(!ReadFile.eof())
{
ReadFile.getline(line,512,'\n');
n++;
}
return n;
}
那么有2个方案(个人设想):
其一,先预读一行(按字符读入一个够大的数组),统计其中的空格数,空格数减1就是每行需要读取的数据个数。(大概可以用getline来处理)
其二,预先获取整个文件的总行数(=城市个数)。代码是网上Ctrl+V来的
int CountLines(char *filename)
{
ifstream ReadFile;
int n=0;
char line[512];
ReadFile.open(filename,ios::in);//ios::in 表示以只读的方式读取文件
if(ReadFile.fail())//文件打开失败:返回0
{
return 0;
}
else//文件存在
{
while(!ReadFile.eof())
{
ReadFile.getline(line,512,'\n');
n++;
}
return n;
}
参考资料: http://apps.hi.baidu.com/share/detail/22492154
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询