#1,2の注意点を修正したソースを挙げます。
正確にはCSVと言えなくなっていますが、
動作はします。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
char name[20];
int ten[3];
}RECORD;
void csv(char *filename);
void display_csv_file(char *filename);
FILE *fpcsv;
void main(int argc, char **argv){
csv(argv[1]); /* キーボード ⇒ CSV(テキスト)ファイル */
display_csv_file(argv[1]); /* CSV(テキスト)ファイル ⇒ ディスプレィ */
}
void csv(char *filename){
RECORD seiseki;
int i;
fpcsv = fopen(filename,"w+");
while(printf("name(Ctrl + Z終了) >"),gets(seiseki.name) != NULL){
if(seiseki.name != NULL){
for(i = 0; i < 3;i++){
printf("得点%d >", i + 1);
scanf("%d", &seiseki.ten[i]);
}
fprintf(fpcsv,"%s %d,%d,%d\n", seiseki.name, seiseki.ten[0],seiseki.ten[1],seiseki.ten[2]);
}
rewind(stdin);
}
fclose(fpcsv);
}
void display_csv_file(char *filename){
char buf[255];
int i, sum, tokkuten[3];
fpcsv = fopen(filename,"r+");
while(fscanf(fpcsv,"%s %d,%d,%d", buf, &tokkuten[0],&tokkuten[1],&tokkuten[2]) != EOF){
/*名前表示*/
/* strtok(buf,","); */
printf("name:%s ",buf);
/*得点表示&合計計算*/
printf("得点1:%d 得点2:%d 得点3:%d\n", tokkuten[0],tokkuten[1],tokkuten[2]);
sum = tokkuten[0] + tokkuten[1] + tokkuten[2];
/*合計表示*/
printf(" 合計得点: %d\n", sum);
}
fclose(fpcsv);
}
実行結果
name(Ctrl + Z終了) >test
得点1 >12
得点2 >34
得点3 >56
name(Ctrl + Z終了) >^Z
name:test 得点1:12 得点2:34 得点3:56
合計得点: 102
お礼
ありがとうございます。fscanfの第2引数の書式はテキストとあわせてやらないとうまくできないことがよく分かりました。