2012-01-22 9 views
2

ファイルの先頭に改行を出力します問題は、ファイルが最初の文字として余分な改行を取得することがあることです。 これは、いくつかのバッファからlelftoversのだろう、私は本当にあなたが正しかった@spatz、私は文字列形式のものに新しいの一種だ...fprintfのは、私は、私は複数回の書き込みには、次のコマンドを使用してい</p> <p>新しいファイルに印刷する関数fprintfを使用してい

typedef struct Data { 
    char name[26]; 
    int day; 
    int speed; 
    float temp; 
} Data ; 

を知らないと私は、一つのために作るように言われました私はここで、データのビット間のスペース未定量を期待した関数fscanfは、私は、問題のソースかなり確信して、私が思い付いたものです:

check=fscanf(fp1, "%20c%*[^0-9]%d%*[^0-9]%f%*[^0-9]%d%*[^\n]%*c", name, &day, &temp, &speed); 

最初の行のみを取得しますその後はすべてが前の行の新しい行を読み込みます。

誰かが私にこのことを書く正しい方法を教えてもらえますか?

+0

「temp-> data」のタイプの定義を表示します。すべての警告を出してコンパイルしていますか? –

+0

'fp'はどのように開いていますか?単純に 'name'が改行で始まることはありますか? – spatz

+0

完全なコードを投稿してください。そうしないと、問題を解決しようとするすべての試みが純粋な推測になります。私。どのようにファイルを開くのですか?ファイルは前に存在しますか?それは別のプログラムで開きますか? 'data'構造体の実際のデータは何ですか? – moooeeeep

答えて

0

fscanf()を繰り返し呼び出して、改行が望みどおりになることを期待するのではなく、fgets()を使用して一度に1行を取得し、fscanf()を使用して解析し、バイ・ライン・ベース。これはエラーが起こりにくく、余分な労力をかけずに問題を解決するように思えます。

0

あなたの問題は、nameが改行で始まり、その改行がファイルに終わることです。

ファイルを適切に解析するには、その形式を知っておく必要がありますが、今のところ私はそれが<string> <int> <int> <float>だとします。各要素間のスペースの数は異なる場合があります。

私が始めようとしているフォーマット文字列は、単に"%s%d%d%f"で、fscanf()は空白文字を扱います。このフォーマット文字列で、私は、これはあなたが解析していると私は解決策を考え出すしてみますファイルの形式について詳しく説明して自由に感じる満たしていない場合は、適切

foo  3 4 7 

のような行を解析することができました。

関連する問題