프로그래밍

 3198, 1/160 회원가입  로그인  
   bak405
   [C언어]파일입출력에서 fwrite, fclose 질문입니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2802 [복사]


#include<stdio.h>

struct student{
        char name[20];
        char stud_id[20];
        char number[20];
        char major[20];
};
int main()
{
        struct student st;
        struct student *fp = &st;
        int test;
        FILE *file;
        do{
                printf("*학생 정보 입력*\n");
                printf("1. 학생 정보 추가\n");
                printf("2. 학생 정보 모두 출력\n");
                printf("3. 학생 정보 찾아서 출력\n");
                printf("4. 학생 정보 수정\n");
                printf("5. 학생 정보 삭제\n");
                printf("99. 프로그램 종료\n");
        
                scanf("%d",&test);

                if(test == 1)
                {
                        file = fopen("report","ab");
                        printf("%5s %8s %8s %5s\n", "이름","학번","학년","전공");
                        while(scanf("%s %s %s %s",st.name,st.stud_id,st.number,st.major) == 4)
                        {
                                //fwrite(fp,sizeof(struct student),1,file);
                        }
                        //fclose(file);
                }
                if(test == 2)
                {
                        file = fopen("report.txt","at");
                        printf("%5s %8s %8s %5s\n", "이름","학번","학년","전공");
                        while(fread(fp,sizeof(struct student),1,file)>0)
                        {
                                printf("%5s %8s %8s %5s\n", fp->name,fp->stud_id,fp->number,fp->major);
                        }
                        fclose(file);
                }
        }while(test!=99);
        return 0;
}
우선 빗금 친 부분에서 자꾸 오류가 뜨더라고요
함수 사용법에 따라 값을 입력하고 컴파일도 제대로 되고 그랬는데
묘하게 프로그램을 실행시키면 빗금 친 라인을 실행할 때 프로그램이 죽어버리는 경우가 있어서 질문드립니다.

  Hit : 7744     Date : 2010/12/12 03:57



    
별빛을담아 C언어의 파일입출력은 FILE*이라는 파일포인터 변수에
불러오거나 저장할 파일의 경로가 저장된 변수!!의 주소값이 저장되어 있습니다.

일단 <a href=http://www.winapi.com target=_blank>http://www.winapi.com</a>
여기에 C/C++레퍼런스라는 메뉴에 가셔서 fwrite와 fopen 함수가 어떻게 굴러가는지 보시면
좀 더 쉽게 이해하실 수 있을 것 같습니다.
2010/12/12  
bak405 흠.. 그런데 이와 비슷한 소스의 예제 프로그램
#include <stdio.h>
#include <stdlib.h>
#include "student.h"

main()
{
struct student st, *stp = &st;
FILE *fp = fopen("st_file", "wb");
if(fp == NULL ) {
printf("파일 열기 오류\n");
exit(1);
}

printf("학번 이름 학년 전공\n");
while (scanf("%d %s %d %s", &st.stud_id, st.name, &st.year, st.major) == 4)
{
fwrite(stp, sizeof(struct student), 1, fp);
}
fclose(fp);
}
이 프로그램이랑 소스가 비슷하고요. 이 프로그램은 중간에 프로그램이 죽지 않고 잘 실행되는데 이 소스는 왜 죽는지 잘 모르겠어요;
2010/12/12  
별빛을담아 혹시나 싶어서 그런데
fopen으로 파일이 제대로 열렸는지 한번 확인해보세요
2010/12/12