gpt4 book ai didi

c++ - WHILE 循环和数据输入

转载 作者:行者123 更新时间:2023-11-28 03:39:03 25 4
gpt4 key购买 nike

我之前尝试过使用 for 循环来放入数据,但问题太大了。所以我尝试使用 while 循环,它可以工作,但是当我尝试调试它时,它继续将 -858993460 放入每个插槽。 .dat 文件在正确的位置并打开。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

struct record
{
int item_id;
string item_type;
float item_price;
int num_stock;
string item_title;
string item_author;
int year_published;
};

void read_all_records(record records[], int &valid_entries);
int num_inventory_of_type(record records[], string type, int &valid_entries);
const int max_array = 100;
int main()
{
int valid_entries = 0;
record records[max_array];
read_all_records(records, valid_entries);

cout << "Stock Report" << endl;
cout << "------------" << endl;
int book = num_inventory_of_type(records, "book", valid_entries);
cout << "Book's In Stock: " << book << endl;
int cd = num_inventory_of_type(records, "cd", valid_entries);
cout << "CD's In Stock: " << cd << endl;
int dvd = num_inventory_of_type(records, "dvd", valid_entries);
cout << "DVD's In Stock: " << dvd << endl;

return 0;
}

void read_all_records(record records[], int &valid_entries)
{
ifstream invfile;
invfile.open("inventory.dat");
if (!invfile.is_open())
{
cout<<"file open failed";
exit(1);
}
while(invfile.good() && valid_entries < max_array)
{
invfile >> records[valid_entries].item_id >> records[valid_entries].item_type
>> records[valid_entries].item_price >> records[valid_entries].num_stock
>> records[valid_entries].item_title >> records[valid_entries].item_author
>> records[valid_entries].year_published;
if(!invfile.good())
break;
valid_entries++;

}
invfile.close();

}
int num_inventory_of_type(record records[], string type, int &valid_entries)
{
int count = 0;
int holder = 0;
for (int count = 0; count<valid_entries; count++);
{
if (records[count].item_type == type)
{
holder+=records[count].num_stock;

}
}

return holder;
}

.dat 文件是

123456
book
69.99
16
Problem_Solving_With_C++
Walter_Savitch
2011
123457
cd
9.99
32
Sigh_No_More
Mumford_and_Sons
2010
123458
dvd
17.99
15
Red_State
Kevin_Smith
2011
123459
cd
9.99
16
The_Church_Of_Rock_And_Roll
Foxy_Shazam
2012
123460
dvd
59.99
10
The_Walking_Dead_Season_1
Robert_Kirkman
2011

全部换行,没有空格。

基本上它应该启动,运行 read_all_records 函数并将 .dat 数据放入数组中。但是,我将 cout << records[count].item_id; 放在 while 循环中只是为了查看数据是否真正进入,并且每次都得到 -858993460。之后它应该运行下一个函数 3 次并返回每本书的数量。

最佳答案

您使用了整数类型 intitem_price . invfile >> records[count].item_price然后只会提取 69而不是 69.99 ,因此当您尝试提取 year_published 时会导致错误.

使用 floatdouble相反。

struct record
{
int item_id;
string item_type;
float item_price;
int num_stock;
string item_title;
string item_author;
int year_published;
};

/* skipped identical lines */

while(invfile.good() && count < max_array)
{
invfile >> records[count].item_id >> records[count].item_type
>> records[count].item_price >> records[count].num_stock
>> records[count].item_title >> records[count].item_author
>> records[count].year_published;
cout << records[count].item_price << endl;
if(!invfile.good())
break;
cout << records[count].item_id << endl;
count++;
}
invfile.close();

请注意,for (int count = 0; count<max_array; count++); 中多了一个分号.我猜你不是故意的,所以删除它。

关于c++ - WHILE 循环和数据输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916458/

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