getchar()에 대한 질문!

gwpia0409 Reply 6 years 33 weeks ago
1. input의 첫번째 값만 입력하는 방법이 있을까요? getchar()은 순서대로 다 넣는 것 아닌가요..? 질문을 쓰면서 이상한 질문 같다는 생각도 드네요...반복문에서-(c=getchar())!=eof 일 때만 순서대로 다 넣는 거 같았는데... 지금 확인해보고 싶은 것은 첫번째 입력값이 공백인지 공백이 아닌지 확인하고 싶은 것입니다. 공백이라면 state=out상태로 시작하고 싶고 공백이 아니라면 state=in상태로 시작하고 싶은데, if((c=getchar())!=' ') state in; else state=out; 이라고 적었는데...음 이게 맞게 적용한 것인지 잘 모르겠네요. 2. 어떤 경우에는 컴파일해서 실행하면 명령프롬프트에서 입력값을 1줄만 적은 다음에 엔터만 쳐도 바로 실행되는 프로그램이 있고 어떤 경우에는 한줄 띄고 ^z를 누른 후에 엔터를 쳐야 실행되는 프로그램이 있습니다. 제가 답안으로 제출한 것은 전자에 해당되는 것 같은데.. 어떻게 하면 후자로 바꿀 수 있는지 궁금합니다.
onacloud Reply 6 years 33 weeks ago
먼저 질문에 대해서 답변을 할께요. 1번째 질문은 첫번째 입력값만 체크해서 out또는 in상태에서 시작하고 싶다는 것이죠. 이경우 아래와 같은 코드를 while 상단에 위치시키면 되긴하죠. 하지만 문제를 해결하는데 적절한 접근법은 아닙니다. if ((c = getchar()) != EOF) { if (c != ' ' && c != '\n'&& c != '\t') { state = in; } else { state = out; } } 이 문제의 경우 연속된 단어구분자를 \n 하나로 표현해야 하는 숙제를 가지고 있습니다. 따라서 단어구분자에 in하는지 out하는지 체크하는게 적절한 방법입니다. 2. 엔터를 누를때마다 프로그램이 결과를 냈을 경우에는 getlines 함수를 사용했을때 일것입니다. 라인의 첫번째위치에서 ^z를 눌렀을때 프로그램이 결과를 내는 경우는 while ((c = getchar()) != EOF) 일 것입니다.