私は先にfor
ループを使用してデータを入れようとしましたが、問題になりました。だから私はwhile
ループを使用しようとしましたが動作しますが、デバッグしようとするとすべてのスロットに-858993460
が続きました。 .dat
ファイルが正しい場所にあり、開きます。WHILEループとデータエントリ
#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回実行し、各書籍の数を返します。
while(!invfile.eof()) '< - あなたのエラーがあります。 –
StackOverflowのエチケットは最小の例を提供することです - あなたのエラーを表示する可能なコードの最小量。誰もそれをすべて見たくはありません。 それはあなたもそれを把握するのに役立つかもしれません。 – cmo
Mooing Duckのエラーは何ですか? @CycoMatto、私はお詫び申し上げます。私はちょっと手掛かりがないので誰もが問題の内容を理解したかっただけです。 – Nogg