gpt4 book ai didi

c++ - 将 .txt 中的数据输入结构数组

转载 作者:行者123 更新时间:2023-11-30 04:23:29 26 4
gpt4 key购买 nike

对于我的 c++ 家庭作业,我有一个 .txt 文档,其中包含按如下顺序排列的建筑信息:

建筑物名称建成年份纬度坐标经度坐标

例如

Parking Deck
1993
34.2252
37.5563
Admin Building
1985
34.2356
37.5734

我必须将其读入我创建的结构数组中:

struct list 
{
char name[50];
int yearBuilt;
double latCoord;
double lonCoord;
} building;

现在我已经创建了一个 for 循环来将数据读入我创建的列表类型数组:

list buildingnumber[SIZE]; //array for buildings

但是当我尝试打印出最早 build 的“k”座建筑物时,数组中没有显示任何数据

这是我当前的代码:

#include <iostream>
#include <fstream>
#include <istream>
#include <cstdlib>
#include <string>

using namespace std;
const int SIZE = 5000;

//struct for building type
struct list
{
char name[50];
int yearBuilt;
double latCoord;
double lonCoord;
}building;

list buildingnumber[SIZE]; //array for buildings

void InsertionSort(list buildingnumber[], int buildingsloaded)
{
int key = 0, i = 0;
for(int j = 1; j < buildingsloaded; j++)
{
key=buildingnumber[j].yearBuilt;
i=j-1;
while(buildingnumber[i].yearBuilt > key && i >= 0)
{
buildingnumber[i+1] = buildingnumber[i];
i--;
}
buildingnumber[i+1].yearBuilt = key;
}
}

int main()
{
char filePath[50];
ifstream openFile;
cout << "Enter the path of the building file: ";
cin.getline(filePath, 50);
openFile.open(filePath);

//verify if file is opened + report buildings loaded
int buildingsloaded = 0;
if(!openFile.fail())
{
while(openFile >> building.name >> building.yearBuilt >> building.latCoord >> building.lonCoord)
{
buildingsloaded++;
}
cout << buildingsloaded << " buildings have been loaded." << endl;
}

// get how many buildings user wants
int k = 0;
cout << "How many buildings are you interested in?: ";
cin >> k;

//create array
// loadKbuildings(building, buildingsloaded);
for(int i = 0; i < k; i++)
{
openFile >> buildingnumber[i].name >> buildingnumber[i].yearBuilt >> buildingnumber[i].latCoord >> buildingnumber[i].lonCoord;
}

// insertion sort
InsertionSort(buildingnumber, buildingsloaded);

// display earliest k buildings
cout << "The " << k << " oldest buildings are: " << endl;
int i = 0;
while ( i < k )
{
cout << buildingnumber[i].name << endl;
cout << "Year Built: " << buildingnumber[i].yearBuilt << endl;
cout << "Coordinates: (" << buildingnumber[i].latCoord << "," << buildingnumber[i].lonCoord << ")" << endl;
cout << endl;
i++;
}
}

最佳答案

问题出在这里:

if(!openFile.fail())
{
while(openFile >> building.name >> building.yearBuilt >> building.latCoord >> building.lonCoord)
{
buildingsloaded++;
}
cout << buildingsloaded << " buildings have been loaded." << endl;
}

您已经读取了所有数据(计算建筑物的数量);下次您尝试获取数据时,它就不见了。

您可以通过在第一次扫描时将建筑物存储在数组中来解决此问题。

int c = 0;
if(!openFile.fail())
{
// *
while(openFile >> buildingnumber[c].name >> buildingnumber[c].yearBuilt >> buildingnumber[c].latCoord >> buildingnumber[c].lonCoord)
{
buildingsloaded++;
c++;
}
cout << buildingsloaded << " buildings have been loaded." << endl;
}

根据 WhozCraig 的评论,星号下的一行只读了一个单词表示建筑物的名称;您应该改用 cin.getline() 并更改循环条件。

你显然也应该去掉下面的数据阅读部分:

//create array
// loadKbuildings(building, buildingsloaded);
for(int i = 0; i < k; i++)
{
openFile >> buildingnumber[i].name >> buildingnumber[i].yearBuilt >> buildingnumber[i].latCoord >> buildingnumber[i].lonCoord;
}

关于c++ - 将 .txt 中的数据输入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com