#include <stdio.h>
int main()
{
char array[1000]={};
while (1)
{
fgets(array, 1000, stdin);
printf("%s", array);
if(fgets==NULL)
exit(1);
}
return 0;
}
이 코드를 실행해서 input에 여러줄의 문자열을 넣어주면 왜 마지막 줄은 출력되지 않고 프로그램도 끝나지 않는건가요?
일단 fgets함수에 대해서 설명하기 전에 코드에서 잘못된 점부터 먼저 짚고 가겠습니다.
1. if(fgets==NULL)
조건문이 잘못되어있죠.
fgets는 함수이름이기 때문에 저런 식으로 정의내릴 수 없겠죠.
2. exit(1);
리눅스 환경에서 사용할 수 있는 시스템콜입니다.
윈도우환경에서는 사용할 수 없으므로, exit가 아니라 return을 쓰는게 옳습니다.(리눅스에서는 return을 쓰면 exit 시스템콜로 변경하지만 윈도우즈는 리눅스와 커널이 다르기 때문에 exit가 없습니다. 자세한 내용은 OS시간이나 시스템 프로그래밍 시간에 배우게 될 것입니다.)
아마 제 생각에는 마지막줄이 출력이 안되는게 아니라 마지막줄이 계속해서 출력될 것 같습니다.
fgets함수는 기본적으로는 파일에서 string을 읽어오는 기능을 합니다. 파일부분을 stdin으로 선언해주면 gets와 같은 역할을 하게 되죠.
fgets함수는 출력값으로 string을 복사한 곳을 가리키는 포인터값을 반환합니다. 만약 입력값이 없으면 NULL을 반환하겠죠.
저 코드를 제대로 실행하고 싶다면 아래와 같이 수정해야할 것입니다.(물론 좋은 코드는 아닙니다만...)
#include <stdio.h>
int main()
{
char* check;
char array[1000]={};
while (1)
{
check = fgets(array, 1000, stdin);
if(check==NULL)
return 0;
printf("%s", array);
}
}
fgets함수에 대한 자세한 내용은 다음 링크를 참고하시기 바랍니다.
http://www.cplusplus.com/reference/cstdio/fgets/