ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 퀴즈의 내용을 파일에서 읽어와서 저장하기
    C,C++로 만드는 간단한 프로젝트/OX Quiz 2021. 1. 1. 19:31

     

    프로젝트는 빈 프로젝트로 생성한다.

    프로젝트를 생성했으면. 아래의 텍스트 파일을 다운로드한다.

     

    아래는 문제와 답이 적혀 있는 텍스트 파일이다.

    문제가 있고 그 다음 줄은 문제에 대한 답이다.

     

    아래의 텍스트 파일은 퀴즈의 문제들과 답들이 있다.

    Quiz.txt
    0.00MB

     

    텍스트 파일은 생성한 프로젝트의 경로에 두도록 한다. 아래의 그림을 참고하자.

     

    먼저 해야할 작업은 위의 텍스트 파일에 있는 문제와 답을 읽어와서 저장을 해야 한다.

    그러기 위해서는 구조체를 하나 정의해야 한다.

    < Quiz.h >

     

    그리고 구해야할 내용에 문제의 개수를 알아야 한다.

    구하는 방법은 Quiz.txt파일에서 전체 라인수를 읽어들여서 2로 나누면 된다.

    그 이유는 txt파일에는 문제와 답의 전체 라인 수가 74줄이므로 여기서 2로 나누면 문제가 37개임을 알 수 있다.

    먼저, main함수에서 문제의 개수를 구하는 프로그래밍을 해보자.

     

    내용은 아래와 같다.

     

    실행결과

     

     

    위와 같이 결과가 정상적으로 출력되면, main함수에서는 문제의 수만큼 배열을 동적할당해주면 된다.

     

    그리고 파일에 있는 내용들을 quiz배열에 저장하도록 하자.

    함수의 이름은 ReadFile이라고 한다.

    ReadFile함수에서 fgets, fscanf함수를 써야 하는데, 그냥 이렇게 호출하면 에러가 나서

    아래의 그림과 같이 main.c의 맨 위에 #define _CRT_SECURE_NO_WARNINGS 이라고 적어준다.

     

    ReadFile 함수

     

    그리고 파일에서 불러온 데이터가 quiz배열에 저장되었는지 확인하는 함수로, 문제와 답을 모두 출력하는 함수를

    하나 만들자. 함수의 이름은 DisplayQuiz이다.

     

    main함수에서 이 두 함수를 호출해서 그 실행결과를 보자.

     

    실행결과

    문제의 개수는 모두 37문제가 나온다.

    그런데 문제가 하나 있다. 문제와 답이 서로 간격이 생겼다. 위의 실행결과에서 1번문제와 1번 문제 답에 빈 줄이 있다.

    즉, 개행문자( '\n' )가 들어있다.

    개행문자가 들어있는지 확인을 하자.

     

    ReadFile 함수에 다음과 같이 두고 break point를 걸고 F10을 눌러서 확인을 할 것이다.

     

    다음과 같이 조사식에 의해

    quiz배열의 0번 인덱스 문제 문자열의 맨 마지막 자리 앞에 '\n'이라는 개행문자가 들어있음을 알 수 있다.

    이와 같은 이유는 fgets 함수의 특징이다.

    그렇기 때문에 이 개행문자의 자리에 널 문자를 삽입해서 개행을 없애도록 하자.

     

    기존의 ReadFile함수를 복사해서 ReadFileFix 함수라고 새로 만들자.

     

    main함수에서 ReadFile함수대신 ReadFileFix함수를 호출해서 실행결과를 보자.

    아래와 같이 문제와 답 사이에 개행이 사라졌다.

     

    아래는 지금까지의 소스 파일

    main.c
    0.00MB
    Quiz.h
    0.00MB

     

    댓글

Designed by Tistory.