fgets로 여러 줄 파일 읽기

6320 단어 C 언어tech
fgets()를 통해 파일의 내용을 읽습니다.하지만 여러 줄도 읽을 수 있었으면 좋겠어요.fgets 함수는
  • 첫 번째 인자char *: 파일에서 읽는 문자열을 제어하는characterpointer
  • 보조 매개 변수int: 파일에서 읽는 문자열의 최대 길이
  • 제3인자FILE *: 파일 흐름의 지침.stdin도 가능합니다.
  • fgets 함수로서의 행위
  • 줄 바꿈
  • EOF
  • 도착할 때 문자열의scan이 정지합니다.따라서 간단하게 fgets만 사용하면 한 줄만 읽을 수 있다.
    이를 감안하여 while 순환로를 합병할 것이다.
    또한 각 줄을 읽을 때 주의점으로 마지막 줄에 \n를 fgets로 삽입하는 행위이기 때문에 주동적으로 제거할 필요가 있다.
    이것도 파일의 마지막 줄 이외에 발생하는 것을 고려한다.
    코드는 다음과 같습니다.
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_LINE_LENGTH 20
    
    int main () {
        FILE *fp;
        char str[100];
    
        fp = fopen("file.txt", "r");
        if(fp == NULL){
            perror("error opening file\n");
            return 0;
        }
    
        int l = 0;
        while (fgets(str, MAX_LINE_LENGTH, fp) != NULL) {
    
            // need to check if the last character is \n and
            if(*str && str[strlen(str) - 1] == '\n'){
                str[strlen(str) - 1] = 0;
            }
            printf("%d: %s\n", l, str);
            l++;
        }
    
        fclose(fp);
    
        return 0;
    }
    
    읽기 대상의 파일은 다음과 같다.file.txt의 내용은 다음과 같다.
    hogehoge11
    hogehoge22
    hogehoge33
    
    출력.

    참고 자료

  • https://www.includehelp.com/c/c-program-to-read-string-with-spaces-using-scanf-function.aspx
  • https://stackoverflow.com/questions/41535735/c-fgets-scans-extra-char-while-trying-to-scan-a-string
  • https://www.geeksforgeeks.org/fgets-gets-c-language/
  • 좋은 웹페이지 즐겨찾기