0

現時点では、double値を配列のインデックスに格納しようとしています。私がこれを正しく行っていると言える限り、私は間違っているに違いありません。なぜなら、プログラムを実行すると、かなり異常な数値が得られるからです。

事前のおかげで、私はこれを理解するのにいくつかの助けを使うことができました。

ps:表示されている値は、基本的にその特定のメモリ位置に格納されている最後の値だと思います。

コード(もっと見る必要があるかどうか教えてください):

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

using namespace std;

int INDEXES = 0;

string *names_Array;
double *rates_Array;
double *hours_Array;

void subscript(ifstream&, int&, string&, double&, double&);
void arrayInput(ifstream&, string [], double [], double[],
    string&, double&, double&);

int main()
{
    string names;
    double rates;
    double hours;

    string filename("employee sample file.txt");
    ifstream employeeInfo(filename.c_str());

    if (employeeInfo.fail())
    {
        cout << "Sorry, file was not successfully opened. "
             << "Please make sure your file exists and\n" 
             << "re-run the program." << endl;
    }

    subscript(employeeInfo, INDEXES, names, rates, hours);

    names_Array = new string[INDEXES];
    rates_Array = new double[INDEXES];
    hours_Array = new double[INDEXES];


    arrayInput(employeeInfo, names_Array, rates_Array, hours_Array,
        names, rates, hours);

    cout << rates_Array[0] << endl
         << rates_Array[1] << endl
         << rates_Array[2] << endl
         << rates_Array[3] << endl
         << rates_Array[4] << endl;

    employeeInfo.close();

    system("pause");
    return 0;
}

void subscript(ifstream& employeeInfo, int& INDEXES,
string& names, double& rates, double& hours)
{
    while(!employeeInfo.eof())
    {   
        employeeInfo >> names >> rates >> hours;

        INDEXES++;
    }
}

void arrayInput(ifstream& employeeInfo, string names_Array[], double rates_Array[], 
            double hours_Array[], string& names, double& rates, double& hours)
{
    int i = 0;
    string line;

    while(getline(employeeInfo, line))
    {
        employeeInfo >> names >> rates >> hours;

        names_Array[i] = names;
        rates_Array[i] = rates;
        hours_Array[i] = hours;

        i++;
    }
}

入力ファイル(ダブルスペースは無視してください):

クリントン10.0010

リンカーン5.0050

ワシントン32.0035

ケネディ4.9945

ニクソン10.0025

出力:

-6.27744e + 066

-6.27744e + 066

-6.27744e + 066

-6.27744e + 066

-6.27744e + 066

出力は次のようになります。

10.00

5.00

32.00

4.99

10.00

4

2 に答える 2

1

あなたが何をしようとしているのかは明らかですが、どこから始めればよいのかわからないほど多くの間違いがあります。残念ながら、コードは大まかに正しくなく、正確に正しくなければなりません。

これが機能するプログラムです。もう一度やり直したほうがいいと思います。

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

static int subscript();
static void arrayInput(string* names_Array, double* rates_Array, double*hours_Array);

const string filename("employee sample file.txt");

int main()
{
    int INDEXES = subscript();
    string* names_Array = new string[INDEXES];
    double* rates_Array = new double[INDEXES];
    double* hours_Array = new double[INDEXES];
    arrayInput(names_Array, rates_Array, hours_Array);
    cout << rates_Array[0] << endl
         << rates_Array[1] << endl
         << rates_Array[2] << endl
         << rates_Array[3] << endl
         << rates_Array[4] << endl;
}

static int subscript()
{
    ifstream employeeInfo(filename.c_str());
    string name;
    double rate, hour;
    int count = 0;
    while (employeeInfo >> name >> rate >> hour)
        ++count;
    return count;
}

static void arrayInput(string* names_Array, double* rates_Array, double* hours_Array)
{
    ifstream employeeInfo(filename.c_str());
    string name;
    double rate, hour;
    int count = 0;
    while (employeeInfo >> name >> rate >> hour)
    {
        names_Array[count] = name;
        rates_Array[count] = rate;
        hours_Array[count] = hour;
        ++count;
    }
}

理解を助けるために、私は同じ変数名と関数名を保持しました(それらのいくつかは少し奇妙だと思いますが)。

たぶん、このコードとあなたのコードの違いを研究することは助けになるでしょう。知らない。

于 2012-11-23T22:26:03.363 に答える
1

subscript関数内で、がファイルの終わりに達し、関数employeeInfo内でファイルの内容を再度読み取ろうとしましたarrayInput。最初から読み直すようにemployeeInfoに指示する必要があります。

void arrayInput(ifstream& employeeInfo, string names_Array[], double rates_Array[], 
            double hours_Array[], string& names, double& rates, double& hours)
{
    int i = 0;
    string line;

    employeeInfo.seekg (0, ios::beg);  // <-- add this line to point to the start of the file again

    while(getline(employeeInfo, line))
    {
        employeeInfo >> names >> rates >> hours;

        names_Array[i] = names;
        rates_Array[i] = rates;
        hours_Array[i] = hours;

        i++;
    }
}
于 2012-11-23T22:26:52.970 に答える