4

次のことをどのように行うべきかを理解するためにあなたの助けをお願いします:

スペースで区切られた整数を含むファイルがあります''。すべての整数を読み取り、並べ替えて、文字列として別のファイルに書き込む必要があります。コードを書きましたが、charをcharごとに読み取り、その単語をchar sub_arr [Max_Int]に入れ、''に出会ったときに、これらのcharを、別のMain int配列に割り当てた後、1つの文字列に入れました。ファイルの最後に文字列ごとに到達し、次にそれらをソートしてitoaし、別のファイルに書き込みました。

しかし、それから私はfscanf関数があることを思い出しました :私はそれについて読みました、そしてそれでも私はそれが何をするのかそしてそれをどのように使うのか完全には理解していませんでした。

私の場合、すべての整数がスペースで区切られているので、書くことができますfscanf(myFile,"%s",word)か?''を考慮せず、特定の文字列の最後で停止することを知っているでしょうか?!どのように?

それ以上に、私は書くことができますfscanf(myFile,"%d",number)、そしてそれは私に次の番号自体を与えるでしょう?(私はそれを誤解したに違いありません。魔法のように感じます)。

4

3 に答える 3

6

あなたは正しいfscanfです、あなたに次の整数を与えることができます。ただし、ポインタを提供する必要があります。したがって、&ビハインド番号が必要です。

fscanf(myFile, "%d", &number);

*scanf関数ファミリーも自動的に空白をスキップします(、、またはが指定されている場合を%c除く%[%n

ファイルを読み取るループは、最終的に次のようになります。

while (you_have_space_in_your_array_or_whatever)
{
    int number;
    if (fscanf(myFile, "%d", &number) != 1)
        break;        // file finished or there was an error
    add_to_your_array(number);
}

補足:あなたはこのように書くことを考えるかもしれません:

while (!feof(myFile))
{
    int number;
    fscanf(myFile, "%d", &number);
    add_to_your_array(number);
}

これは見栄えはしますが、問題があります。実際にファイルの終わりに到達している場合は、ファイルの終わりをテストする前に、ガベージ番号を読み取り、データに追加しているはずです。そのため、while最初に説明したループを使用する必要があります。

于 2012-07-18T14:27:57.117 に答える
2

次の行はあなたの仕事をします、次の行は単一の整数を読みます。

int number;
fscanf(myFile, " %d", &number);

ファイルの終わりまでループに入れ、番号を配列に入れます。

于 2012-07-18T14:20:21.397 に答える
2

これを試して:

#include <stdio.h>


int main(int argc, char* argv[])
{
    char name[256];
    int age;
    /* create a text file */
    FILE *f = fopen("test.txt", "w");
    fprintf(f, "Josh 25 years old\n");
    fclose(f);

    /* now open it and read it */
    f = fopen("test.txt", "r");

    if (fscanf(f, "%s %d", name, &age) !=2)
        ; /* Couln't read name and age */
    printf("Name: %s, Age %d\n", name, age);

}
于 2012-07-18T14:25:52.957 に答える