오답... 도와주세요...
#include<stdio.h>
int main (void)
{
int c,d;
c=0;
d=0;
while(c!=EOF)
{
c=getchar();
if(c==' ')
{
putchar(c);
do
{
d=getchar();
if(d!=' ')
{
putchar(d);
}
}
while(d==' ');
}
else
{
putchar(c);
}
}
return 0;
}
비쥬얼 c++ 2010 Express 에서 실행하면 되는거 같은데 자꾸만 틀렸다고 나오네요... 도와주세요
c=getchar(); 를 통해 EOF가 들어 올 수 잇습니다.. 그러면.. 어떤 일이 발생하죠
오랜시간 고민 후 Accepted 되었으나 질문이 있습니다....
1.
EOF가 컨트롤z를 의미하는것이 맞나요...?
2.
문장중간에
while(c!=EOF)
{
c=getchar();
대신
while((c=getchar())!=EOF) 를 사용해도
문장에 컨트롤z 를 입력하면 똑같이 종료되지 않고 이상한 기호가 나옵니다
정상인건가요?
3.
while(c!=EOF)
{
c=getchar();
랑
while((c=getchar())!=EOF)
두 코드를 사용할때의 차이점을 알려주실 수 있을까요...?
4.
그리고 답변해주신
"c=getchar(); 를 통해 EOF가 들어 올 수 잇습니다.. 그러면.. 어떤 일이 발생하죠"
문장에 컨트롤z 가 왔을때 이상한 기호가 나오는것을 말씀하신 건가요?
음..우선 2번질문은.. 이전 문자열들과 한꺼번에 EOF를 버퍼에 올리면
윈도우에선 ^Z를 EOF로 인식하지 못한다고 하네요..즉 이전문자열들과 함께 '문자'로 인식한다고 합니다. 아마 이상한 기호가 출력되면서 종료되지 않는 이유이겠죠?? EOF는 EOF하나만 입력해주어야 한다고 합니다.
http://stackoverflow.com/questions/5655112/why-do-i-require-multiple-eof-ctrlz-characters 읽어보세요
그리고 3번 첫번째 : 조건 판별-> 성립시 getchar호출
두번째 : getchar 호출-> 조건판별
판별되는 c값이 달라지겠죠...?