2

ファイルから行を読み取ろうとしています。lineを使用して行を取得しfgetsます。次に、を使用sscanfして解析しようとします。時々私は電話sscanfをして、それが間違った数の引数を返すことを発見します。そこで、同じline文字列を再解析してみます。うまくいくこともあれば、うまくいかないこともあります(これにより、問題はsscanfコード内の他の何かにあると私は信じるようになります)。これが私が意味することの例です:

i = sscanf(line,"%d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n", &faceV1, &faceUV1, &faceN1, &faceV2, &faceUV2, &faceN2, &faceV3, &faceUV3, &faceN3,
                &faceV4, &faceUV4, &faceN4);

if(i == 12) {
    //We gotta quad...
    printf("Model.c: Quads not supported\n");
} else if(sscanf(line,"%d/%d/%d %d/%d/%d %d/%d/%d\n", &faceV1, &faceUV1, &faceN1, &faceV2, &faceUV2, &faceN2, &faceV3, &faceUV3, &faceN3) == 9) {
    //Doesn't do what I expect!
    ...

しかし、私がそれを取り除きi = sscanf...、チェックしi == 12て直接行くとif(sscanf(line,"%d/%d/%d %d/%d/%d %d/%d/%d\n", &faceV1, &faceUV1, &faceN1, &faceV2, &faceUV2, &faceN2, &faceV3, &faceUV3, &faceN3) == 9)、期待どおりに機能します。

では、この質問のタイトルに戻ってsccanf、同じ文字列で複数回呼び出すことはできますか?私はそれを間違って呼んでいますか?または、コードの他の場所で問題を探す必要がありますか?

4

1 に答える 1

1

簡単な答えはい、同じ文字列を複数回スキャンできます。

あなたの問題は、文字列に "\n" が含まれていると期待どおりに動作しないことです...これは、\n だけでなく、任意の空白文字スペース、タブ、\r に一致します。

そのため、スキャン後に行末を確認する必要があります。

于 2013-02-18T16:27:13.047 に答える