반응형
ungetc(3)
#include <stdio.h>
int ungetc(int c, FILE *stream);
stream으로 부터 1바이트 읽은 데이터를 마치 안읽은 것처럼 다시 되돌리는 경우에 사용합니다. 데이터는 int type이지만 되돌릴 때에는 (unsigned char)로 type casting되어 되돌립니다. 즉, 1바이트 이외의 상위 바이트는 모두 잘리게 됩니다.
파라미터
c
- 되돌릴 1바이트 데이터
stream
- fopen(3) 등으로 생성한 FILE *.
RETURN
c
- 정상적으로 stream으로 되돌렸으면, 데이터인 c를 return합니다.
EOF
- 오류가 발생하였거나 end of file입니다.
활용 예제
Sample. 뛰어쓰기 단위로 문자열 얻기
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
int skip_space_char(FILE *fp)
{
int ch;
while((ch = fgetc(fp)) != EOF) {
/* space, tab, crrage return, line feed 등의 문자이면 버림*/
if(isspace(ch)) {
continue;
} else { /* space문자가 아니면 다시 되돌림*/
ungetc(ch);
return 1;
}
}
return 0;
}
int get_word(FILE *fp, char *data, int len)
{
int idx = 0;
int ch;
while((ch = fgetc(fp)) != EOF) {
if(isspace(ch)) {
data[idx] = 0x00;
return idx;
} else {
data[idx] = ch;
}
}
data[idx] = 0x00;
return idx;
}
int main(int argc, char *argv[])
{
FILE *fp;
int size;
char data[2048];
if((fp = fopen("mydata.dat", "r")) == NULL) {
fprintf(stderr, "file open error: %s\n", strerror(errno));
return 1;
}
while(1) {
if(skip_space_char(fp) == 0) {
break;
}
if((size = get_word(data, fp)) == 0) {
break;
}
printf("%s\n", data);
}
fclose(fp);
return 0;
}
see also :
반응형
'C언어 header > stdio.h' 카테고리의 다른 글
fputc(3) - stream으로 1바이트 쓰기 (0) | 2019.09.24 |
---|---|
fgets(3) - stream으로부터 1라인 읽기 (0) | 2019.09.24 |
fgetc(3) - stream으로부터 1byte 읽기 (0) | 2019.09.24 |
fwrite(3) - binary stream 쓰기 (0) | 2019.09.24 |
fread(3) - binary stream 읽기 (0) | 2019.09.24 |