3

プログラムにファイルからの入力を読み取らせようとしていますが、fscanfが通常行う空の行をスキップしません。ファイルとスキャンファイルへのループは次のとおりです。

 inFile = fopen("text.txt", "r");

 for(i = 0; fscanf(inFile, "%s", &input[i]) != EOF; i++){
     printf("%d %s\n", i, input[i]);
 }

出力:

0 one
1 two
2 three
3 four
4 five
5 six
6 seven
7 eight
8 nine
9 ten
10 eleven
11 twelve
12 thirteen
13 fourteen
14 fifteen
15 sixteen
16 seventeen
17 eighteen
18 nineteen
19 twenty
20 thirty
21 forty
22 fifty
23 sixty
24 seventy
25 eighty
26 ninety

それは私が望むものではありません。読み取られるテキストが、それが言う配列内の位置を表すようにしたい。つまり、「90」はinput[89]にあります。

読み取られるファイルは次のとおりです。

one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty









thirty









forty









fifty









sixty









seventy









eighty









ninety

これらの各単語は、どの行から読み取られているかを表すと想定されています。20行以上の間にスペースを追加しているので、iを使用して、読み込まれるデータの行を表すことができます。つまり、テキストジェネレーターに数値を作成して読み取ります。

999.99

なので

nine hundred ninety-nine and 99/100

tl; dr単語を含む配列内の位置をハードコーディングしたくないので、イテレーターに作業を行わせようとしています。配列内の位置を取得するには、空白行を読み取る必要があります。

fscanfにここでの仕事をさせる方法はありますか?それとも私は何か他のものを使うべきですか?

ありがとうございました

4

2 に答える 2

2

を使用したほうがいいと思いますfgets()。必要に応じsscanf()て、結果の文字列を使用して解析できます。

編集-このようなもの:

inFile = fopen("text.txt", "r");
size_t i = 0;

while (fgets(input[i], LINE_SIZE, inFile))
{
    printf("%d %s\n", i, input[i]);
    ++i;
}
于 2013-02-19T17:35:08.970 に答える
2

fgets()改行を含むすべてを読み取るときに調べる必要があります。行は空白ではなく、単なる新しい行であることを忘れないでください。さらにfgets()、よりもはるかに安全な選択ですfscanf()

于 2013-02-19T17:52:17.903 に答える