비쥬얼 스튜디오 EOF문제에대해서

JiungChoi Reply 8 years 48 weeks ago
안녕하세요 조교님. 저가 비쥬얼 스튜디오를 쓰고있는데 while((c=getchar())!=EOF) { answer[i++]=c; } 뭐 이런식으로 했을떄 항상 마지막 문장에서 바로 이오에프를 하고 엔터를 누르면 결과값이 출력이 안되고 마지막 문장 엔터 하고 이오에프하고 엔터해야지 값이 나오더라고요.. getchar의 입력버퍼 머시기때문이라고 듣긴 들었는데 혹시 문장뒤에 바로 이오에프하고 엔터눌렷을때 바로 출력값이 나오는 꿀팁 있을까요..? // 이래서 맨날 항상 뤙엔써 한번 받고 시작합니다.. 혹시 괜찮으시면 getchar와 EOF의 논리 관계좀 알려주세요 ..ㅠㅡㅠ 아직까지 이걸 모르다니 저도 심각한가 봅니다.
pichulia Reply 8 years 48 weeks ago
저도 몰라요(!!) 그냥 받아들이세요(!!!!) 문장 뒤에 Ctrl+Z를 누르게 되면 아스키코드값 26으로 읽히게 됩니다. 그럼 while((c=getchar()) != 26) 이렇게 함으로써 채점환경과 비슷하게 흉내는 낼 수 있죠. 물론 제출할 땐 저 26을 EOF로 다시 바꾸고 제출해야합니다. 뭐, 뭔가 주저리주저리 써놓긴 했는데 전 위의 방법을 한번도 사용한 적이 없습ㄴ니다ㅋㅋㅋㅋㅋ 제가 주로 사용하는 방법은 파일 입력인데요, 코드 시작부분에 freopen("input.txt","rt",stdin); 을 사용하면 콘솔창입력 대신 파일에서 데이터를 읽어올 수 있게 됩니다. freopen에 대해서 검색하면 이것저것 많이 나올거에요....EOF가 End Of File 이니까...파일로 읽는게 제일 확실하죠.
pichulia Reply 8 years 48 weeks ago
아는사람의 정보에 의하면 기본적으로 VS 콘솔에서 Ctrl + 알파벳 단축키는 알파벳번째 아스키코드값을 입력하기 위한 단축키라네요 (예를 들어 Ctrl + J 를 입력하면 줄바꿈이..)그런데 특별케이스로 문장의 시작이 Ctrl + Z 일 때만 EOF로 취급하도록 한다고 합니다. 아는사람의 추가정보에 의하면, UNIX 업계 쪽에선 EOF 직전의 문자가 줄바꿈이 아닌 텍스트는 정상적인 텍스트로 취급하지 않기 때문이라고 하더라고요...하지만 Algorithm 업계에서는 마지막줄의 마지막을 EOF로 넣는 것이 더 일반적이기 때문에....이런 문제가 생기는거 같습니다ㅋㅋㅋ 결론은..음..그냥 받아들이세요(!!!!)ㅋㅋㅋㅋ