아래의 코드를 실행하면
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)로 고치면
으로 나오는데요
그런데 도무지 이해되지 않는 것은 제가 알기로는 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>
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);
}