c로 구조체 파일 입출력하는데
2진파일로 하나맹글고
fwrite(구조체배열,구조체덩어리,덩어리수,파일포인터) 하고
fread(구조체배열,구조체덩어리,덩어리수,파일포인터) 하면 값이
뷁뒒퀡퀡휅뤡ㄹ줻뤨뤨뤠랄라라
뭐 이런거 나와 ㅠㅠㅠㅠㅠ 이거 왜 이런거야?
아래가 소스코드..
typedef struct subject{
char name[20];
char gubun[20];
float hakjum;
float pyungjum;
float total;
float Eval;
} sub; //이건 구조체고
void input(char* name){
int n, i=0,k=0,z=0,len=0;
FILE* f1;
sub *suB,*suB2;
float total=0,totalH=0,pyung=0;
printf("입력할 과목 수 : ");
scanf("%d",&n);
f1=fopen(name,"ab"); //파일스트림개방
if(f1==NULL){
printf("파일 읽기 오류\n");
exit(1);
}
suB=(sub*)malloc(n*sizeof(sub)); //입력값 만큼 구조체배열 suB 크기 할당
if(suB==NULL){
printf("메모리 부족!\n");
free(suB);
exit(1);
}
printf("*****************************************************\
\n[과목명-과목구분-학점-평점] 순으로 입력하시오.\nEX) 전자장_공학전공_3_4.3\n");
printf("[평점값] A+:4.3 A0:4.0 A-:3.7 B+:3.3 B0:3.0 B-:2.7 \
\n C+:2.3 C0:2.0 C-:1.7 D+:1.3 D0:1.0 D-:0.7 F:0.0\
\n*****************************************************\n\n");
for(z=0;z<n;z++){
printf("%d 번째 과목 입력 : ",z+1);
scanf("%s %s %f %f",suB[z].name,suB[z].gubun,&suB[z].hakjum,&suB[z].pyungjum);
suB[z].total=total+=suB[z].pyungjum*suB[z].hakjum;
totalH+=suB[z].hakjum;
suB[z].Eval=total/totalH;
}
fprintf(stdout,"\n평점토탈 : %.3f, 평점평균 : %.3f\n",suB[z-1].total,suB[z-1].Eval);
///////////////////////데이터 save
// for(z=0;z<n;z++){
// fwrite(&suB[z],sizeof(sub),1,f1);
// fprintf(f1,"%7s %7s %7.0f %7.3f %7.3f %7.3f\n",suB[z].name,suB[z].gubun,suB[z].hakjum,suB[z].pyungjum,suB[z].total,suB[z].Eval);
// }
// fseek(f1,0L,SEEK_END);
// printf("커서위치 : %lf\n",ftell(f1)); <<<<<<<<<<<<<<<<<<<<<<<<<<<< ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ파일위치지시자? 이거 계속 0이야 ㅠ
fwrite(suB,sizeof(sub),n,f1);
fclose(f1);
free(suB);
///////////////////////////////////// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<요부분이 문젠거 같은데 뭐가문제지..
//다시 열긔
f1=fopen(name,"ab");
if(f1==NULL){
printf("파일 읽기 오류\n");
exit(1);
}
len=get_file_length(name);//stat()으로 파일크기를 변수로 받음.
suB2=(sub*)malloc(len); //새로 동적할당.
while(1){
printf(">>데이터 보기 (1), 추가입력 (2), 초기화면 (0) : ");
scanf("%d",&i);
if(i==1){
printhead();
fread(&suB2,sizeof(sub),(int)(len/sizeof(sub)),f1);
for(z=0;z<(int)((len/sizeof(sub)));z++){
fprintf(stdout,"%7s %7s %7.0f %7.3f\n",suB2[z].name,suB2[z].gubun,suB2[z].hakjum,suB2[z].pyungjum);
}
fprintf(stdout,"\n평점토탈 : %.3f, 평점평균 : %.3f\n",suB2[z-1].total,suB2[z-1].Eval);
while(1){
printf(">>추가입력 (1), 초기화면으로 (0) : ");
scanf("%d",&k);
if(k==1){
fclose(f1);
free(suB2);
input(name);
}
else if (k==0){
fclose(f1);
free(suB2);
menu();
}
else {
printf("잘못된 입력입니다.\n");
continue;
}
}
}
else if(i==2){
fclose(f1);
free(suB2);
input(name);
}
else if(i==0){
fclose(f1);
free(suB2);
menu();
break;
}
else {
printf("잘못된 입력입니다.\n");
continue;
}
}
free(suB2);
}
밑에 두명이랑 친구제?
요시! 과제 시즌!
레알 밑에 두명이랑 친구일것 같다
나 저런애 몰라. 내일까지 만들어야해ㅜㅜ 도와줘 성님들
바카라룰baccara→【주소▶affn5.w70.kr◀복사】←바카라룰baccara◇바카라룰baccara◇바카라룰baccara━━바카라룰baccara