バイナリ形式出入力について(初心者です)
Posted: 2013年11月17日(日) 13:13
学校で出された課題でどうしてもうまく作れないプログラムがあります。
課題の内容は、
test3.txt
satoh
8
181
193
80
176
185
132
124
89
上記の形式のテキストファイルの内容を、バイナリファイルに書き込むプログラムを作成せよ。ただし、
1, 2 行目はテキストとして書き込み、行末には改行文字を書き込む
3 行目以降は、点数 1 つあたり 1 バイトの整数値としてバイナリ形式で書き込む
さらに書き込んだバイナリファイルから内容を読み取り、出力するプログラムを作成せよ。
というものです。
一つ目のプログラムは、
#include <stdio.h>
#define NUM 64
int main(void){
FILE*fp;
FILE*fp2;
fp = fopen("test3.txt","r");
if(fp == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
fp2 = fopen("test3.bin","wb");
if(fp2 == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
char name[NUM];
int classes;
int score[NUM];
int i;
fgets(name,NUM,fp);
fscanf(fp,"%d",&classes);
for(i=0; i<classes; i++){
fscanf(fp,"%d",&score);
}
fprintf(fp2,"%s",name);
fprintf(fp2,"%d\n",classes);
fwrite(score,sizeof(int),classes,fp2);
fclose(fp);
fclose(fp2);
return 0;
}
二つ目のプログラムは
#include <stdio.h>
#define NUM 64
int main(void){
FILE*fp;
fp = fopen("test3.bin","rb");
if(fp == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
char name[NUM];
int classes;
char score[NUM];
int i;
fgets(name,NUM,fp);
fscanf(fp,"%d",&classes);
fread(score,sizeof(char),classes,fp);
printf("%s",name);
printf("%d\n",classes);
for(i=0; i<classes; i++){
printf("%d\n",(int)score);
}
fclose(fp);
return 0;
}
としましたが、3行目以降の整数が全く違う整数になってしまいます。
どこが間違っているのでしょうか。
ちなみに私はまだ習って一年にも満たないプログラミング初心者です。
課題の内容は、
test3.txt
satoh
8
181
193
80
176
185
132
124
89
上記の形式のテキストファイルの内容を、バイナリファイルに書き込むプログラムを作成せよ。ただし、
1, 2 行目はテキストとして書き込み、行末には改行文字を書き込む
3 行目以降は、点数 1 つあたり 1 バイトの整数値としてバイナリ形式で書き込む
さらに書き込んだバイナリファイルから内容を読み取り、出力するプログラムを作成せよ。
というものです。
一つ目のプログラムは、
#include <stdio.h>
#define NUM 64
int main(void){
FILE*fp;
FILE*fp2;
fp = fopen("test3.txt","r");
if(fp == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
fp2 = fopen("test3.bin","wb");
if(fp2 == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
char name[NUM];
int classes;
int score[NUM];
int i;
fgets(name,NUM,fp);
fscanf(fp,"%d",&classes);
for(i=0; i<classes; i++){
fscanf(fp,"%d",&score);
}
fprintf(fp2,"%s",name);
fprintf(fp2,"%d\n",classes);
fwrite(score,sizeof(int),classes,fp2);
fclose(fp);
fclose(fp2);
return 0;
}
二つ目のプログラムは
#include <stdio.h>
#define NUM 64
int main(void){
FILE*fp;
fp = fopen("test3.bin","rb");
if(fp == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
char name[NUM];
int classes;
char score[NUM];
int i;
fgets(name,NUM,fp);
fscanf(fp,"%d",&classes);
fread(score,sizeof(char),classes,fp);
printf("%s",name);
printf("%d\n",classes);
for(i=0; i<classes; i++){
printf("%d\n",(int)score);
}
fclose(fp);
return 0;
}
としましたが、3行目以降の整数が全く違う整数になってしまいます。
どこが間違っているのでしょうか。
ちなみに私はまだ習って一年にも満たないプログラミング初心者です。