게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 fgets 함수에 대해서 질문
게시물ID : programmer_11924짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 2644회
댓글수 : 12개
등록시간 : 2015/07/06 20:30:02
아래의 코드를 실행하면

kate

johne

jackson
으로 나오고 fputs.txt화일에 같은 내용이 저장되는데요.
그런데 
while(fgets(Getnames[i],10,fp)!=NULL)부분을 만약에
while(fgets(Getnames[i],2,fp)!=NULL)로 고치면 
k
a
t
e

j
o
h
n
e

j
a
c
k
s
o
n
으로 나오고
while(fgets(Getnames[i],5,fp)!=NULL)로 고치면 
kate

john
e

jack
son

으로 나오는데요
그런데 도무지 이해되지 않는 것은 제가 알기로는 fget함수는 지정된 바이트수만큼 읽거나 '\n'를 입력받거나 리턴값이 NULL이 나오면 끝나는 것으로 알고 있는데요
그렇다면 만약 while(fgets(Getnames[i],5,fp)!=NULL)라면 5개('k','a','t'',e','\n\)
까지 읽고 fgets은 더이상 동작하지 않아야 하지 않나요?
근데 결과를 보면 계속해서 문자열를 읽고 있는데 이건 오로지 while의 조건인 리턴값이 NULL이 아니기 때문에 계속 동작하는 건가요?
그렇다면 fget이라는 함수가 동작을 멈추게 하는 조건인 지정된 바이트수만큼 읽거나 '\n'을 입력받는 조건은 전혀 의미가 없지 않나요?
fgets는 지정된 바이트 만큼 읽고 더이상 동작을 멈추는데 while문에서는 그 동작을 멈추는 조건들(지정된 바이트수만큼 읽거나 '\n')이 전부 취소가 되어버리는 거 같은데 이러면 뭔가 논리가 이상하다고 생각하는데요.
while문에서는 fgets의 종료조건이 무시되어도 상관없는지 아니면 제가 생각하는 것이 아닌 다른 조건에 의해서 fgets가 종료되지 않고 동작하는건지 알고 싶네요.
 

#include <stdio.h>
#include<stdlib.h>

void main()
{

FILE *fp;
int i;
char name[3][10]={"kate","johne","jackson"};
char Getnames[3][10];

if((fp=fopen("fputs.txt","w"))==NULL)

puts("error"),exit(0);

//fputs
for(i=0;i<3;i++)
{
fputs(name[i],fp);
fputc('\n',fp);
}
fclose(fp);

if((fp=fopen("fputs.txt","r"))==NULL)
{
puts("error");
exit(0);
}
//fgets
i=0;
while(fgets(Getnames[i],10,fp)!=NULL)
{
puts(Getnames[i]);
}
//
fclose(fp);
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호