-4

したがって、基本的に私のコードでは、入力ファイル ( )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++;
    }
}
4

1 に答える 1