4

すべてのプログラマーに多大な敬意を払う初心者プログラマー。髪の毛がなくなり、これらの問題を解決しようとして疲れ果ててしまうことがあります. とにかく現在の割り当てでは、私が行った.txtファイルからデータを読み込んでいます。計算を実行し、画面に出力します。読み込まれたデータには、出力ファイルに書き込むことになっている変数よりも多くの変数があります。データを読み込んだので、tripNumber と FinalCost を 2 つの異なる配列に読み込んでから、データを逆方向にファイルに書き込む必要があります。私はそれのほとんどを持っていますが、コードで明確にする必要があるいくつかの場所で立ち往生しています。誰もが独自の問題を抱えていることを理解してください。これは悲しい話ではありません. 私は週に 60 時間以上働き、学位を取得しようとしています。この複雑なスキルを理解しやすくするための助けやアドバイスをありがとう。

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>

using namespace std;
int main()
{

//create two arrays
const int ARRAY_SIZE = 100; //array size of 100 elements

ifstream fileIn; //create file object 
ofstream fileSave; //create new output file
fileIn.open("TripInput.txt"); //read in file

//Variables to hold data from the file
int tripNbr = 0;
double fuelCost = 0;
double fuelTotal = 0;
double wasteDisp = 0;
double misCost = 0;

int counter = 0;

int nbrOfTrip[ARRAY_SIZE];
double totalCost[ARRAY_SIZE];

for(counter = 0; counter < ARRAY_SIZE; counter++)
{
nbrOfTrip[counter] = 0;
totalCost[counter] = 0;
}

cout<<"Welcome to My Space Travel Company"<<endl;
cout<<endl;
cout<<"Trip No"<<setw(10)<<"Fuel"<<setw(10)<<"Waste"<<setw(10)<<"Misc"<<setw(15)
<<"Discount Fuel"<<setw(15)<<"Final Cost"<<endl;

if(fileIn.fail())//test to see if file opened
{
cout<<"File did not open."<<endl;
}

while(fileIn>>tripNbr>>fuelCost>>wasteDisp>>misCost) //while loop to read in data from   file
{
fuelTotal = fuelCost - (fuelCost * .10);
double finalCost = fuelTotal + wasteDisp + misCost;
cout<<tripNbr<<setprecision(2)<<fixed<<setw(14)<<fuelCost<<setw(10)<<wasteDisp
    <<setw(10)<<misCost<<setw(15)<<fuelTotal<<setw(15)<<finalCost<<endl;

//Write trip number and final cost to the 2 parallel arrays...not sure how to
//to do this.


//open output file
fileSave.open("TripCost.txt");

//for loops to output data to file
for(counter = 0; counter < ARRAY_SIZE; counter++)
{
fileSave<< nbrOfTrip[counter]<<endl;
fileSave<< totalCost[counter]<<endl;
}
}
system("Pause");
return 0;
}
4

1 に答える 1

4

いくつかのことが思い浮かびます。まず、「ファイルからデータを読み込む while ループ」が間違った場所で終了します。そのはず

while(fileIn>>tripNbr>>fuelCost>>wasteDisp>>misCost) //while loop to read in data from   file
{
    fuelTotal = fuelCost - (fuelCost * .10);
    double finalCost = fuelTotal + wasteDisp + misCost;
    cout<<tripNbr<<setprecision(2)<<fixed<<setw(14)<<fuelCost<<setw(10)<<wasteDisp
        <<setw(10)<<misCost<<setw(15)<<fuelTotal<<setw(15)<<finalCost<<endl;

    //Write trip number and final cost to the 2 parallel arrays...not sure how to
    //to do this.

}

ファイルに出力した後、このループは終了します。つまり、ファイルを複数回出力することになりますが、これは正しくありません。

次に、旅行番号と最終的な費用を配列に書き込むのは非常に簡単です。追加した旅行の数を数えるための追加の変数が必要です。これを「numberOfTrips」と呼んでいます。このような

int numberOfTrips = 0;
while(fileIn>>tripNbr>>fuelCost>>wasteDisp>>misCost) //while loop to read in data from   file
{
    fuelTotal = fuelCost - (fuelCost * .10);
    double finalCost = fuelTotal + wasteDisp + misCost;
    cout<<tripNbr<<setprecision(2)<<fixed<<setw(14)<<fuelCost<<setw(10)<<wasteDisp
        <<setw(10)<<misCost<<setw(15)<<fuelTotal<<setw(15)<<finalCost<<endl;

    //Write trip number and final cost to the 2 parallel arrays
    nbrOfTrip[numberOfTrips] = tripNbr;
    totalCost[numberOfTrips] = finalCost;
    ++numberOfTrips;
}

最後に、データをファイルに書き込むときは、配列全体ではなく、並列配列に追加されたエントリの数のみを書き込む必要があります。したがって、最後のループでは、前のループの 'numberOfTrips' 変数を使用する必要があります。このような

//for loops to output data to file
for(counter = 0; counter < numberOfTrips; counter++)
{
    fileSave<< nbrOfTrip[counter]<<endl;
    fileSave<< totalCost[counter]<<endl;
}
于 2013-11-11T22:43:32.790 に答える