2016-11-27 17 views
1

現在私のプログラムでは、fscanfを使って、ファイルが|シンボル。これは、最初の|に達したときに前進しないので、問題を提起しています。ポインタを1ポジション前に移動できますか?C - fscanf - ファイルポインタを前方に移動できますか?

ここで私が使用していたコードです:

fscanf(reader, "%d[^|]", &record1[0].CustomerID); 
printf("%d \n", record1[0].CustomerID); 
fscanf(reader, "%99[^|]", record1[0].domain); 
printf("%s \n", record1[0].domain); 
fscanf(reader, "%99[^\n]", record1[0].timestamp); 
printf("%s \n", record1[0].timestamp); 

を情報などのファイルに分離されている:

31 | www.facebook.comは| 2015年10月15日12時13分: 02

は、任意の助けを大幅まず

+2

fseek()関数をチェックしてください。 –

+0

[fseek()](http://beej.us/guide/bgc/output/html/multipage/fseek.html)機能。 –

+0

'"%d [^ |] "'とは何ですか? – AnT

答えて

0

を理解されるであろう、%[]自己十分フォーマットのみ文字列を読み取ることができています。最初のfscanf"%d[^|]"は、おそらくそれが望むように、「|シンボルまで整数を読み込む」の意味ではありません。 %dフォーマットは|で停止します。|文字は整数表現の有効な部分ではないためです。

第二に、例残りの部分であなただけの、その文字をスキップし、前方の1つの文字をファイルポインタを移動するあなたは

fscanf(reader, "%99[^|]%*c", record1[0].domain); 

にぶつかった文字の非割り当ての読み取りを行うことができます。

それとも、あなたのフォーマットはとても厳格であれば代わりに、あなたは非常に最初のfscanf

fscanf(reader, "%d|", &record1[0].CustomerID); 

しかし保つように記述することができます。この場合

fscanf(reader, "%99[^|]|", record1[0].domain); 

ようなfscanf年代を書くことができます%[]形式では空の文字列を読み取ることができないことに注意してください。 %[]の形式が単一の入力文字と一致しない場合は、は空の文字列を読み取る代わりにに失敗します。

特に、fgetsを使用し、手動で文字列を解析することが望ましい理由があります。

+0

ああ、私は、情報をありがとう!私はまだfscanfが最初の文字列の後に文字列を読み込んでいないと指定した行を使っています。単に元の値を保持します。これは最初のものを過ぎて動いていないからではありませんか? –

+0

@トーマス・ミルワード:多分。 (あなたのコードは表示されません)。最初の 'fscanf'(および残りの部分も)は' fscanf(reader、 "%d |"、&record1 [0] .CustomerID); 'と書くことができます。そうすれば、 '|'と動くはずです。 – AnT

+0

それはそれを修正しました!ありがとうございました!! –

関連する問題