C언어 파일 입출력에 대해서

조회수 553회
#include <stdio.h>
#include <string.h>

int main()
{
    FILE* rfp;
    FILE* wfp;
    char aa[200];
    char bb[200];
    int change;

    rfp = fopen("file1.txt", "r");
    wfp = fopen("file2.txt", "w");

    while (1)
    {
        fgets(aa, 200, rfp);
        //fscanf(rfp, "%s", aa);

        change = strlen(aa);

        if (feof(rfp))
            break;

        for (int i = 0; i < change; i++)
        {
            bb[i] = aa[(change - 1) - i];

        }
        bb[change] = '\0';

        fprintf(wfp, "%s\n", bb);
        //fputs(bb, wfp);
    }

    fclose(rfp);
    fclose(wfp);

    return 0;
}

위처럼 file1의 문자열을을 거꾸로 입력해주고, file2에 출력해주는 코드를 만들었는데요.

왜 fgets(aa, 200, rfp); 함수를 사용할 땐 file2에서 처럼 맨 위에 공백이 생길까요?

다른 부분에 공백이 생기는 건 fgets() 함수가 '\n'까지 읽어오기 때문인건 이해가 되는데

맨 위에 생긴 공백에 대해서는 이해가 잘 되지 않네요..!

file1

Visual
Studio Professional
Basic-C
Study

file2

(지금 여기 공백 있음)
lausiV
(공백)
lanoisseforP oidutS
(공백)
C-cisaB
(공백)
ydutS

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    fgets 함수는 '\n'을 포함한 한줄을 파일에서 읽어옵니다.

    따라서 file1을 처음 읽으면 "Visual\n"을 배열 aa에 읽어 오고, 이 문자열을 거꾸로 재배치했기 때문에 문자열은 "\nlausiV"로 바뀝니다. 이 상태에서 출력을 하면 줄바꿈(\n)+"lausiV"가 출력됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다!!!! 선태욱 2022.6.11 14:00

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

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

(ಠ_ಠ)
(ಠ‿ಠ)