2

初歩的な質問で申し訳ありませんが、私はC++が初めてです。

ファイルから情報を 1 行ずつ読み取り、計算を実行して、別のファイルに出力する必要があります。たとえば、各行の一意の ID、名前、および 2 つの番号を読み取ります。最後の 2 つの数字が乗算され、出力ファイルでは、ID、名前、および製品が行ごとに出力されます。

入力.txt:

2431 John Doe 2000 5
9856 Jane Doe 1800 2 
4029 Jack Siu 3000 10

output.txt:

  ID     Name Total
2431 John Doe 10000
9856 Jane Doe 3600
4029 Jack Siu 30000

私のコードはこれに似ていますが、最初の行のみが出力ファイルに表示されます。Enter繰り返し押すと、出力ファイルに他の行が表示されます。

#include <fstream>
using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");

int main () {

    int ID, I, J;
    string First, Last;
    char c;

    cout << "ID\tName\t\Total\n";

    while ((c = getchar()) != EOF) {
        cin >> ID >> First >> Last >> I >> J;
        cout << ID << " " << First << " " << Last << " " I * J << "\n";
    }

    return 0;
}

Enterそれが私の唯一の問題です。繰り返し押してからプログラムを閉じない限り、出力ファイルに値が表示されないということです。キーボード入力なしでタスクを実行するために、上記のコードの修正を誰かが提案できますか? ありがとう!

4

5 に答える 5

9

使用する

while (!cin.eof()) {
于 2010-07-08T19:46:42.907 に答える
7
using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");

本当の std::cin と std::cout を隠しました...後でそれらから読み取ります。

while ((c = getchar()) != EOF) {

しかし、ここでは実際の std::cin を使用して EOF をチェックしています。

于 2010-07-08T19:45:23.517 に答える
6

getchar()呼び出し read は、標準入力 (標準入力) から読み取るため、文字を入力する (そして Enter キーを押す) のを待ちます。cinファイルの終わりに達したときに読み取りを停止するようにループ条件を変更してみてください。

EDIT また、入力ストリームと出力ストリームには別の名前を使用する必要があります。名前空間には既にcincoutがあります。std

于 2010-07-08T19:44:03.363 に答える
1

これは、while ループ条件で getchar() を使用したためです。何をしようとしているのかわかりませんが、getchar() は stdin から文字を読み取ります。あなたがすべきだったのは、cinが失敗したかEOFに遭遇したかどうかを確認することです。

于 2010-07-08T19:45:47.137 に答える
0

答えを探していたときに、それが機能することを確認して確認したほうがよいでしょう。いくつかのビルド エラーが発生し、そこから少し夢中になりました。

お役に立てれば!

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

int main () {

    ifstream indata("input.txt");
    if(!indata)
    { // file couldn't be opened
        cerr << "Error: input.txt could not be opened" << endl;
        exit(1);
    }

    ofstream output("output.txt");
    if(!output)
    { // file couldn't be opened
        cerr << "Error: output.txt could not be opened" << endl;
        exit(1);
    }

    int ID, I, J;
    char First[10], Last[10];

    output << "ID\tName\tTotal\n";
    while (!indata.eof()) 
    {
        indata >> ID >> First >> Last >> I >> J;
        output << ID << " " << First << " " << Last << " " << I * J << endl;
    }

    indata.close();
    output.close();

    return 0;
}
于 2010-07-08T20:28:52.243 に答える