将文本文件中的数据存储在结构数组中
Storing data from a text file in an array of structures C++
我正在尝试从文本文件读取数据到结构数组。for循环的第一次迭代读取并正确显示所有内容,直到它达到布尔值,之后的每次迭代都不按预期显示。末尾的bool值是否会导致错误地读取文件的其余部分?或者可能是由getline引起的问题?
int main()
{
groceryProduct inventoryDatabase[25];
ifstream fin("inventory.txt");
if (!fin)
{
cout << "File could not be located.";
}
string itemName;
for (int index = 0; index < 25; index++)
{
getline(fin, inventoryDatabase[index].itemName, 'n');
fin >> inventoryDatabase[index].itemNumber;
fin >> inventoryDatabase[index].itemPrice;
fin >> inventoryDatabase[index].membershipPrice;
fin >> inventoryDatabase[index].payByWeight;
cout << inventoryDatabase[index].itemName << endl;
cout << inventoryDatabase[index].itemNumber << endl;
cout << inventoryDatabase[index].itemPrice << endl;
cout << inventoryDatabase[index].membershipPrice << endl;
cout << inventoryDatabase[index].payByWeight << endl;
}
return 0;
};
结构:struct groceryProduct
{
double itemPrice;
double membershipPrice;
double itemWeight;
int itemQuantity;
string itemNumber;
string itemName;
bool payByWeight;
};
输出:Apple
P0000
0.85
0.8
204 (expected output of 'false' instead of 204)
第一次循环后每次循环的输出:
-9.25596e+61
-9.25596e+61
204
谢谢,如果您需要更多的信息,请告诉我。
文件:Apple
P0000
.85
.80
false
Orange
P0001
.95
.85
false
Lemon
P0002
.65
.60
false
你需要告诉你的流bool值是带有
的文本fin >> boolalpha >> inventoryDatabase[index].payByWeight
你在第一个bool输入后看到垃圾数据,因为failbit在流中被设置,并且在它被重置之前没有进一步的输入将工作。这将导致数组的数据保持未初始化。
以下是我认为可能导致你的问题的几件事。
1)数组不是"神奇地填充"数据。您有一个未初始化的数组,这意味着其中的数据还不存在。。
要解决这个问题,必须在每次循环迭代开始时向数组中添加一个新的实例。我怎么发现的?好的经验法则:如果很奇怪,那就是与内存有关的。确保已经初始化了所有内容。
2)当你把getline
和<<
放在一起使用时,我看到过奇怪的事情发生。你使用getline
而不是<<
有什么特别的原因吗?
3) 120programalarm所说的是绝对正确的。
旁注:不要因为"我想在那里任意地抛出一个大值"而养成抛出double
的习惯。这是一个浪费空间的坏习惯,因为double
是float
的两倍大。
了解float
和double
之间的区别-除了科学场合,你几乎不会用到double
,因为它适用于有很多小数点的数字。(这太简单化了。)如果您一直使用double
而不是float
,那么您将使用所需内存的两倍-实际上每个变量额外32位。加起来。(人们想知道为什么现代程序需要8GB的RAM来做与使用100mb RAM的前辈相同的事情…)
价格总是有两个(很少是三个)小数点后十位,所以float
应该在所有情况下都完美地符合。
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组