2

ファイルから 3 つの値を読み取り、平均を計算し、それをファイルに出力するための複雑なプログラムを作成する必要があります。これらはすべて異なる関数を使用しており、ファイルから入力を取得する関数は、個別に 3 回呼び出す必要があります。ファンシーなもの。毎回変数を 1 ずつインクリメントしています。入力が取得され、それに応じて行がスキップされます。改行文字までignore()を使用すると最初の2つの入力がうまくいくようですが、最初の2つの入力をスキップして3番目を取得するために2回使用すると、2番目の入力を再度取得し、それを使用して平均。たとえば、5,7 と 10 の平均は 6.3~ でしたが、7.3~ である必要があります。改行文字まで無視を 2 回使用して何か間違ったことをしていますか? メインのコードと関連する 2 つの関数を含めました。

int main() {

    double input_1, input_2, input_3;
    double average;
    int count = 1;

    ifstream infile;
    ofstream outfile;
    infile.open("infile.txt");
    outfile.open("outfile.txt");

    input_1 = get_input(infile, count);
    count = count+1;

    input_2 = get_input(infile, count);
    count=count+1;

    input_3 = get_input(infile, count);

    average = calculate_avg(input_1, input_2, input_3);

    output_to_file(average, outfile);

    infile.close();
    outfile.close();

    return 0;
}

double get_input(ifstream& infile,  int number) {

    double input_value;

    if (number == 1) {
        infile >> input_value;
    }
    else if (number == 2)
    {
        infile.ignore (100, '\n');
        infile >> input_value;
    }
    else if (number == 3)
    {
        infile.ignore (100, '\n');
        infile.ignore (100, '\n');
        infile >> input_value;
    }
    return input_value;
}

double calculate_avg(double val_1, double val_2, double val_3){
    double avg;

    avg = (val_1 + val_2 + val_3)/3;

    return avg;
}
4

2 に答える 2

2

std::fstream::ignore入力ストリームから文字を抽出して破棄するため、100 は最適な選択ではありません

「空想的なものがない」get_input()ためにフォローインを使用してください

infile.seekg(0); // rewind
if (number == 1) {
    infile >> input_value;
}
else if (number == 2)
{
    infile >> input_value;
    infile >> input_value;
}
else if (number == 3)
{
    infile >> input_value;
    infile >> input_value;
    infile >> input_value;
}
return input_value; //only the last read value
于 2013-10-21T18:22:25.367 に答える
1

関数 get_input を次のように記述します。

double get_input(ifstream& infile,  int number) {
    double input_value;
    infile >> input_value;
    infile.ignore (1, '\n');
    return input_value;
}

ファイルを開いて結果的に読み取るため、これは機能します。したがって、数値を読み取った後、内部ポインターは \n 記号にあり、数行をスキップする必要はありません。\n記号をスキップするだけで済みます

于 2013-10-21T18:21:46.763 に答える