したがって、基本的に私のコードでは、入力ファイル ( )warehouse.txt
に追加情報を追加 ( fruitname
, fruitquantity
) 配列から取得し、このファイル ( ) からのすべての情報とwarehouse.txt
、配列からの追加情報を出力ファイル ( updated.txt
) に追加します。
問題は、この出力ファイル ("updated.txt") を入力ファイルとして使用したいということです。私のコードでは、これをどのように行ったかがわかります。問題は、ファイル ( updataed.txt
) を開いて入力ファイルとして使用しようとすると、戦略的cout
にファイルを開くことができないと表示されるため、データを集約できないことです (プログラムの主な目的は、すべてのファイルを並べ替えて、果物の名前が 1 つだけになるようにすることです)対応する数量): (35 行目と 36 行目を見て、入力ファイルに対してそれができる/できないかどうか教えてください。)
自分でプログラムを実行すると、開かないことがわかります。たとえばupdated.txt
、簡単なtxtファイルを作成するだけですwarehouse.txt
{
apple 4
apple 2
pear 3
mango2
pear 3
}
私のコードは現在次のようになっています。
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
typedef struct items {
string name;
int quantity;
} items_t;
void fileopenchecker(ifstream &FILE);
void printfile(items_t fruit [], int entries);
int readfromfile(ifstream &FILE, items_t fruit []);
int extrarray(items_t fruit []);
void writetooutputfile(ofstream &OFILE, items_t fruit [], int size);
int aggregatedataA(items_t overallfruit [], items_t samefruit [], items_t uniquefruit [], int num);
int aggregatedataB(items_t overallfruit [], items_t samefruit [], items_t uniquefruit [], int num);
int main()
{
const int MAX_SIZE = 150;
int Nfruit = 0;
int Nextrafruit = 0;
int total;
int A, B;
ifstream infile("warehouse.txt"), ffile("updated.txt");
ofstream outfile("updated.txt"), overallfile("FINAL.txt");
items_t extrafruit[MAX_SIZE], fruit[MAX_SIZE], overallfruit[MAX_SIZE], samefruit[MAX_SIZE], uniquefruit[MAX_SIZE];
fileopenchecker(infile);
Nextrafruit = extrarray(extrafruit);
Nfruit = readfromfile(infile, fruit);
infile.close();
writetooutputfile(outfile, fruit, Nfruit);
writetooutputfile(outfile, extrafruit, Nextrafruit);
outfile.close();
fileopenchecker(ffile);
total = readfromfile(ffile, overallfruit);
A = aggregatedataA(overallfruit, samefruit, uniquefruit, total);
B = aggregatedataB(overallfruit, samefruit, uniquefruit, total);
ffile.close();
writetooutputfile(overallfile, samefruit, A);
writetooutputfile(overallfile, uniquefruit, B);
overallfile.close();
return 0;
}
int aggregatedataA(items_t overallfruit [], items_t samefruit [], items_t uniquefruit [], int num){
int i, j, x = 0, y = 0;
for (i = 0; i < num; i++){
for (j = 0; j < num; j++){
if (overallfruit[i].name == overallfruit[j].name){
samefruit[x].name = overallfruit[i].name;
samefruit[x].quantity = overallfruit[i].quantity + overallfruit[j].quantity;
x++;
}
else{
uniquefruit[y].name = overallfruit[i].name;
uniquefruit[y].quantity = overallfruit[i].quantity;
y++;
}
}
}
return x;
}
int aggregatedataB(items_t overallfruit [], items_t samefruit [], items_t uniquefruit [], int num){
int i, j, x = 0, y = 0;
for (i = 0; i < num; i++){
for (j = 0; j < num; j++){
if (overallfruit[i].name == overallfruit[j].name){
samefruit[x].name = overallfruit[i].name;
samefruit[x].quantity = overallfruit[i].quantity + overallfruit[j].quantity;
x++;
}
else{
uniquefruit[y].name = overallfruit[i].name;
uniquefruit[y].quantity = overallfruit[i].quantity;
y++;
}
}
}
return y;
}
void fileopenchecker(ifstream &FILE){
if (!FILE.is_open()){
cout << "Your file was NOT detected!" << endl;
exit(1);
}
else{
cout << "Your file was detected" << endl;
}
}
void printfile(items_t fruit [], int entries){
int i;
cout << "Printing from file!" << endl;
for (i = 0; i < entries; i++){
cout << fruit[i].name << "," << fruit[i].quantity;
}
}
int readfromfile(ifstream &FILE, items_t fruit []){
int entries = 0;
while (!FILE.eof()){
FILE >> fruit[entries].name >> fruit[entries].quantity;
cout << fruit[entries].name << fruit[entries].quantity << endl;
entries++;
}
return entries;
}
int extrarray(items_t fruit []){
int runner = 1, exentries = 0;
while (runner == 1){
cout << "Would you like to add entries to your file? (YES-->1 NO-->0)" << endl;
cin >> runner;
if (runner == 0){
break;
}
//take the itemname and quantity and stores it in the array.
cout << "Enter the name of the fruit and its quantity" << endl;
cin >> fruit[exentries].name >> fruit[exentries].quantity;
//debugging:
cout << fruit[exentries].name << fruit[exentries].quantity << endl;
exentries++;
}
return exentries;
}
void writetooutputfile(ofstream &OFILE, items_t fruit [], int size){
int entries = 0;
while (entries < size){
cout << fruit[entries].name << fruit[entries].quantity << endl;
OFILE << fruit[entries].name << fruit[entries].quantity << endl;
entries++;
}
}