2017-02-11 39 views
1

テキストファイルから情報を読み取り、バイナリファイルに書き込むプログラムを作成します。テキストファイルには、
が含まれています。名、姓、ID番号、およびGPA。
ファーストネームとラストネームは、最大長が255で、IDが符号なしintで、GPAがfloatであるchar配列です。各行の後には、同じ4つの情報を持つ別の行があります。テキストファイルの最後までループバックして、情報をbinファイルにコピーし続けますか?たとえば、新しいID番号とGPAを持つ生徒がそれぞれ4〜5行ある場合、テキストからバイナリファイルへのコピーを続けるにはどうすればよいですか?私はループ内にセグメントを持っていると思いますが、ループを実装する方法がわかりません。テキストファイルにはfscanf、バイナリにはfwriteを使用する必要があります。どんな助けもありがたい。テキストファイルからの読み取りとバイナリファイルへの書き込み

unsigned char firstName[255]; 
unsigned char lastName[255]; 
unsigned int id; 
float gpa; 

fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa); //read one line of the text file 
printf("%s %s %d %.1f", firstName, lastName, id, gpa); //print line information ((test)) 

printf("\n"); //newline 

//Writing information to binary file 

fwrite(firstName, strlen(firstName), 1, binfile); 
fwrite(lastName, strlen(lastName), 1, binfile); 
fwrite(&id, sizeof(int), 1, binfile); 
fwrite(&gpa, 4, 1, binfile); 

答えて

1

関数fscanfは - 。「成功すると、関数はアイテムの数が正常に読み込ま返すこのカウントは、測定値の予想数と一致したりすることができ、マッチングに失敗した場合の-evenゼロ以下の場合。データが正常に読み取られる前に入力障害が発生した場合、EOFが返されます。あなたがしたくない場合は、次の

だから、あなたはそれがループ

while(fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa) != EOF) { 
    //Body 
} 

はまたあなたもfeof(stdin)

while(1){ 
     fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa); 
     if (feof(textfile)) 
       break; 
     //Body 
} 

(PSを使用することができますしながら、中== EOFであるかどうかを確認することができますファイルに<を4つのエントリ数読み込み、そこで停止すると、fscanfがカウントを返すので、EOFを4に置き換えて行うことができます)

+0

完璧、ありがとう。 –

+0

@minigeek [それは "欲張りですか?アップヴォート...](http://meta.stackoverflow.com/a/298583/2410359) – chux

+0

申し訳ありません@chuxはもう一度やりません。面白いことあなたがあまりにも多くの投票を持っていると言われている質問です。 – minigeek

関連する問題