프로그래밍

 3198, 1/160 회원가입  로그인  
   탈라리스
   파일에서 문자열을 읽을 때 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3224 [복사]


파일에서 문자열을 읽어 변수에 저장하는 것을 하고 있습니다.

FILE *input_file=fopen("a.txt", "r");

그런데 파일에 앞의 2개는 띄어쓰기 없이 붙어있는 문자열인데
그 뒤에 있는 마지막 문자열은 띄어쓰기가 있을 수도, 없을 수도 있습니다.

fgets로 한줄을 모두 받아와 sscanf 를 사용하자니 마지막에 띄어쓰기가 있으면 앞에 것만 저장하게 되고....

어찌 좋은 방법 없을 까요?

  Hit : 4247     Date : 2011/11/25 10:09



    
prosthetics 한문자씩 읽어서 char buffer[]에 저장하고
만약 문자가 '\n'이라면 buffer에 담긴 문자열을 원하는 문자열 배열에 담아 주시면 됩니다.
2011/11/25  
prosthetics 참고로 확인해보니
fgets는 띄어쓰기로 구분하는것이 아니라 MAX_COUNT(최대로 읽어올 문자수)만큼 읽어오네요.

#include <stdio.h>

#define LINE_SIZE 512

void main()
{
char buffer[LINE_SIZE];
FILE *output = fopen("a.txt","w");
FILE *input = fopen("a.txt","r");
fprintf(output,"S P A C E\n");
fclose(output);
fgets(buffer,LINE_SIZE,input);
printf("%s",buffer);
fclose(input);
}
2011/11/25  
prosthetics 예제 입니다.

#include <stdio.h>

/*
LINE_SIZE : 한줄의 크기
LINE_COUNT : 총 줄의 개수
*/
#define LINE_SIZE 512
#define LINE_COUNT 100

void main()
{
/*필요한 변수 선언*/
char line[LINE_COUNT][LINE_SIZE];
char tmp;
int i = 0;
int n = 0;
int j;
FILE *output = fopen("a.txt","w");
FILE *input = fopen("a.txt","r");

/*a.txt에 문자열 저장*/
fprintf(output,"S P A C E\n");
fprintf(output,"띄 어 쓰 기\n");
fclose(output);

/*파일의 끝까지 \n을 기준으로 line에 문자열 저장*/
while(true)
{
if(fscanf(input,"%c",&tmp)==-1)//EOF
break;
if(tmp =='\n')
{
line[n][i] = tmp;
line[n][i+1] = NULL;
n+=1;
i=0;
}
else
{
line[n][i++] = tmp;
}

}

/*line에 저장된 값 출력*/
for(j = 0; j<n; j++)
{
printf("%s",line[j]);
}
fclose(input);
}
2011/11/25