파일 입출력을 fscanf를 이용해서 서식을 지정해서 입력 받은 뒤 구조체에 저장하는 과정에서 오류가 납니다.

조회수 1931회

grades.txt에 들어 있는 정보를 구조체에 저장해서 보여주는 프로그램을 작성 중입니다. 아래와 같이 작성했는데, semetation fault 오류가 나거나 무한 루프를 돕니다. 솔직히 어떻게 해결해야 할지 감도 안 잡혀요.

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *fp1;
    fp1 = fopen("grades.txt","r");
    int i = 0,j;
    typedef struct
    {
        int number;
        int q[4];
        int total;
    } student;
    student a[101];
    while(feof(fp1) == 0)
    {
        if(i==0) i++;
        else
        {
            student *st = &a[-1];
            fscanf(fp1,"%d %d %d %d %d %d", &st->number, &st->q[0], &st->q[1], &st->q[2], &st->total);
            printf("%d %d %d %d %d %d\n", st->number,st->q[0], st->q[1], st->q[2], st->total);
            i++;
        }
    }
    fclose(fp1);
    return 0;
}

grades.txt의 내용입니다.

ID       Q1 Q2 Q3 Q4 Total
20131122 20 14 18 22    74
20132400 16 23 11 19    69 

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char hollowString[101];
        FILE *fp1;
        fp1 = fopen("grades2.txt","r");
        int i = 0,j;
        typedef struct
        {
            int number;
            int q[4];
            int total;
            char name[10];
        } student;
        student a[101];
        fgets(hollowString,100,fp1);
        while(fscanf(fp1,"%d %80s %d %d %d %d %d", &a[i].number, &a[i].name ,&a[i].q[0], &a[i].q[1], &a[i].q[2], &a[i].q[3], &a[i].total) == 7 )
        {
            printf("%d %s %d %d %d %d %d \n", a[i].number, a[i].name ,a[i].q[0], a[i].q[1], a[i].q[2], a[i].q[3] ,a[i].total); 
        }
        fclose(fp1);
        return 0;
    }
    
    

    스택오버플로우에 올려서 해답을 구했습니다. 설명도 해당 링크 참조하시면 될 것 같네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)