0

昇順で格納されている整数を含む2つの.txt(data1.txt、data2.txt)ファイルを取得し、それらを昇順でoutput.txt(data3.txt)にマージするプログラムを作成しています。fgets関数を使用して.txtファイルから各intを読み取り、if関数を使用して2つのinput.txtファイルのそれぞれからfgetsを比較しています(これはまったく機能していません)。だから私の質問は、2つのfgets関数を比較して整数を昇順で並べ替える適切な方法は何ですか?

data1.txtに含まれるもの:5 15 25 35 45

data2.txtに含まれるもの:10 20 30 40 50

コードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#define LINE_LENGTH 80


int main()
{
FILE *in1, *in2, *out;
char buffer1[LINE_LENGTH+1], buffer2[LINE_LENGTH+1];
int ch1, ch2;


in1 = fopen("data1.txt", "r");
in2 = fopen("data2.txt", "r");
out = fopen("data3.txt", "w");

if(in1 == NULL || in2 == NULL)
{
    fprintf(stderr, "Cannot open input file - exiting!\n");
    exit(1);
}
if(out == NULL)
{
    fprintf(stderr, "Cannot open output file - exiting!\n");
    exit(1);
}

while( ! feof(in1) ) #Checking for end of file
{
    fscanf(in1, "%d", &ch1);
    fscanf(in1, "%d", &ch2);
    if (ch1 <=  ch2) fputs(ch1, out);
    else fputs(ch2, out);
}


while( ! feof(in2) ) #Checking for end of file
{
    fscanf(in1, "%d", &ch1);
    fscanf(in2, "%d", &ch2);
    if (ch2 <=  ch1) fputs(ch2, out);
    else fputs(ch1, out);
}

fclose(in1);
fclose(in2);
fclose(out);

return 0;

}

私がそれをすべてカバーしたことを願っています、あなたがより多くの情報を必要とするならば私に知らせてください

ありがとう!

- - - - - - - 編集 - - - - - -

fscanfを使用してwhileループを実装しようとしていますが、gccは、fputs関数を含むすべての行に対して「'fputs'の引数1を渡すと、キャストなしで整数からポインターを作成します」というエラーをスローします。fscanfでfputsを使用するべきではありませんか、それともch1 / ch2を別の形式にする必要がありますか?

4

2 に答える 2

1

fgetsが何をするのか本当にあなたは知らないと思います。行を読み取り(バッファが十分に大きい場合)、それをバッファに格納します。次に、同じバッファへのポインタを返します。これは比較しても意味がありません。各整数を読み取って比較する必要がありますfscanf(in1, "%d", &n);。整数をnに読み取るために使用することもできます。これにより、空白が無視され、ファイルに数値のみが含まれていることがわかっている場合に役立ちます。また、ファイルの終わりを超えて、in1場合によってはも読んでいますin2

何が起こっているのか本当に理解していないように見えるので、もう少し考えてみてください。

于 2012-04-23T22:46:25.103 に答える
1

fgetsストリームから文字列を取得するために使用されます。あなたはfscanf整数を読むためのより良いユーザーです。私のアドバイスは、最初にこれらのファイルを2つの別々の配列に読み取り、次にそれらをソートすることです。ファイルが大きくなると、ファイルを開いたままにしておくとエラーが発生する可能性があります。ファイルを整数配列に読み込むためのサンプルコードを次に示します。

int* readFile(int *array, char *file) {
    FILE *fp = fopen(file, "r");
    int x;
    int i = 0;

    while (fscanf(fp, "%d", &x) == 1) {
        *(array+i) = x;
        i++;
    }
    fclose(fp);

    return array;
}
于 2012-04-23T22:49:44.437 に答える