마지막 null 값
제 코드를 돌려보면 마지막 EOF있는 줄은 읽고 제대로된 답을 출력하지 못하는 것 같은데 어디가 틀렸는지 잘 모르겠어요.
sample input 넣으면 다 잘 나오는데 마지막 null이 2개만 나와요..
1. if(c == 'EOF') 라고 하셨는데.. 'EOF' 라는 문자는 없습니다. EOF가 있을 뿐.... (c=getchar()) != EOF 여기서는 EOF로 제대로 사용하셨는데 나중에는 왜 그러셨어요ㅋㅋㅋ
2. 이제 EOF가 있는 줄까지 잘 읽었고 진짜로 끝났을 때는 getchar() 함수에서 끊임없이 EOF를 return하게 됩니다. 그렇다면 지금 코드로는 if(c == EOF) 에서 i++;하는 구문이 존재하므로, getline2()함수는 항상 1을 return하게 됩니다. 그래서 영원히 끝나지 않죠...
왜 getline2() 함수가 항상 1을 return하게 되는건가요?
" if(c == EOF) 에서 i++;하는 구문이 존재하므로 "
요것 때문입니다. EOF일때 i가 1 증가합니다. 첨언하자면 "EOF가 입력일때" getline2 함수는 1을 return하게 되죠. geline2함수의 output이 0일때 main 함수의 while loop이 종료되므로, 무한 loop에 빠지게 됩니다.
c=EOF일 때 return되는 i값은 문자열+2가 아니라 왜 1인거죠? c='\n'일 때는 문자열+2로 i가 return되는 것 아닌가요?
abcde(\n) --> getline2에서 6을 return
abc(EOF) --> getline2에서 4를 return
(EOF) --> getline2에서 1을 return
(EOF) --> getline2에서 1을 return
(EOF) --> getline2에서 1을 return
....
파일 읽기가 끝나서 더이상 읽어들일 문자가 없으면 getchar() 함수에서 끊임없이 EOF를 return하게 됩니다. 즉, c에 EOF가 대입되는거죠... 뭐, EOF로 끝난 마지막줄은 문제없이 잘 동작해요. 여기까진 좋습니다. 하지만 EOF로 끝난 마지막줄을 읽고 계산이 끝난 이후에 이 프로그램은 어떻게 동작하고 있는지 생각해보시기 바랍니다... 그러니까 현재 작성된 소스코드는 프로그램을 언제 종료시키는지를....