본문 바로가기

System Programming

시스템 프로그래밍 프로젝트 #5

문제 :

 

입력 파일 :

sample.txt
0.00MB

 

실행결과 :

 

소스코드 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int len=0;
void print_len_word(char *bp){
    int i;
    for(i=0; bp[i]!='\0'; i++// bp 배열의 끝이 나올때까지 loop 
        if(bp[i]=='\n') bp[i] = '\0'// bp[i]가 개행문자이면 그곳을 NULL로 바꿈 
    printf("%.2X: %s\n", len, bp);
    len += strlen(bp);
}
int main() {
    char buf[80];
    FILE* fp;
    if(!(fp = fopen("test1.txt""r"))) {
        printf("file not open\n"); exit(1);
    }
    while(fgets(buf, sizeof(buf), fp) != NULL)
        print_len_word(buf);
    fclose(fp);
    printf("%X", len);
    return 0;
}
 

 

설명 :

단어들의 전체 길이를 알기위해 len변수를 전역변수로 선언하고 함수 호출시마다 해당하는 단어의 길이를 더해줬습니다.

fgets() 함수를 사용하면 끝에 개행문자가 들어가기 때문에 7, 8번 줄에서 개행문자를 NULL로 바꾸어 줬습니다.

for 문을 사용하지 않고 bp[strlen(bp) - 1] = NULL 같은 방법을 사용하여도 됩니다.

실행 결과 세번째 줄에 문제에는 0A로 나와있는데 계산 결과 0B로 나오는게 맞습니다.