fgets関数を用いて、ファイル(class.dat)を1行ずつ読み込み、memcpyで切り取りをし、生徒の成績を作りたいと考えています。
ファイル(class.dat)の内容は左から、クラス(全角2桁)、氏名(全角20桁)、性別(全角MまたはFの1桁)、国語の点数(半角3桁)、数学の点数(半角3桁)、英語の点数(半角3桁)となっています。また、性別は男・女と表示したいと考えてます。
現在、ファイルの読み込みはできたのですが、memcpyの部分が上手く出来ないです。
C言語初心者なので、考え方が浮かばないので、教えていただけますと幸いです。
txt
1JM田中 なおき M026052036 2JM渡辺よしひこ M056011023 3JM吉田 なおみ F078002014 4JM高橋 啓介 M095100033 5JM武田 謙信 M020025003 6RM大阪 ヒロキ M069078056 7RM太田 信彦 M033069074 8RM吉田 さおり F025085012 9KM守屋 かおり F036075074 10KM佐藤 かよ F014026085 11KM川崎 たかや M025047091 12KM野原 ひろし M098036062
表示したい結果============================
クラス 氏名 性別 国語 数学 英語 合計
JM 田中 なおき 男 026 052 036 114
・・・・・省略・・・・・
===================================
C
1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3#include <stdlib.h> 4 5int main() { 6 7 FILE* fp; 8 char str[256]; 9 char class[4]; 10 char name[64]; 11 char gen[2]; 12 char Tensu[16]; 13 int tensu; 14 int jap; 15 nt math; 16 int eng; 17 18 printf("クラス\t氏名\t\t性別\t国語\t数学\t英語\t合計\t\n"); 19 printf("------------------------------------------------------------\n"); 20 21 22 fp = fopen("class.dat", "r"); 23 24 25 if (fp == NULL) { 26 printf("ファイルオープン失敗\n"); 27 return -1; 28 } 29 30 while (!feof(fp)) { 31 if (fgets(str, 256, fp) == NULL) { 32 break; 33 } 34 35 memcpy(&class, str, 2); 36 memcpy(&name, str[2], 20); 37 memcpy(&gen, str[22], 1); 38 memcpy(&Tensu, str[23], 9); 39 tensu = atoi(Tensu); 40 memcpy(&jap, Tensu[3], 3); 41 memcpy(&math, Tensu[6], 3); 42 memcpy(&eng, Tensu[9],3); 43 44 printf("%s\t %s\t\t %s\t %s\n ", 45 &class, 46 &name, 47 &gen, 48 &jap, 49 &math 50 &eng 51 &jap + &math + &eng 52 ); 53 } 54 fclose(fp); 55 56 return 0; 57} 58
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
回答2件