:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
17/05/26 14:26
네 개행문자요 그 fgets함수가 'n'까지 전부 읽어드리잖아요.그러면 배열 123456 출력되고 7번째에 'n'이 남아있기때문에 clear함수에 들어가게되면 while문 조건이 'n'이 아닐떄 입력버퍼를 실행시킨다는 조건인데 그렇다면 마지막 버퍼가 'n'이면 쓸모없는 함수여야 정상인데 왜 와일문이 실행되서 'n'버퍼가 지워지는지 이해가 안되서요..
17/05/26 14:32
보니까 clear 함수는 while-loop를 사용해서 개행문자가 있는 곳까지 stdin을 비워주는 함수인 것 같네요.
소스가 완전하지 못하고 설명도 애매해서 제가 정확한 설명을 드리는건지 모르겠는데 perid = {'1', '2', '3', '4', '5', '6', '\n'}; 이렇게 들어갔고 이걸 읽어오는거죠? while문이 돌면서 getchar로 한글자씩 읽어왔고 7번째 실행된 시점에서 이미 개행문자는 가져온 겁니다. 순서대로 설명하면 while(getchar...) 에 처음 들어가면 이미 getchar를 하고 1을 가져옵니다. 되돌아가서 또 getchar를 해서 2를 가져오고 3을 가져오고 마지막에 \n을 가져온 겁니다. 가져왔으니까 비교를 하지 가져오기 전에 어떻게 비교를 할까요? C언어 문법의 실행 시점에 대해서 오해를 하고 계시거나 while문과 if문을 착각하고 계신 것 같네요...
17/05/26 14:52
아하;이해했습니다.저 getchar가 이미 실행시키고 난 후에 7번째부터 시작하는게 아니라 입력했던거를 처음부터 시작해서 n이 나올때가지 실행시키는 거엿꾼요..감사합니다
17/05/26 16:10
getchar가 7번째부터 도는게 맞습니다.
perid = {'1', '2', '3', '4', '5', '6', '\0'} 이렇게 들어가고 stdin 에 '\n'이 남은 상황입니다. 123456789입력이었으면 stdin은 "789\n"이 됩니다. while(getchar()!='\n') 로 stdin을 비우고 다음 입력을 받는 겁니다. 자세한 건 아래쪽 링크 읽어보세요.
17/05/26 14:32
while문 조건이 'n'이 아닐떄 입력버퍼를 실행시킨다 가 아니라
일단 입력버퍼를 실행시키고, 그게 \n이 아니면 계속돌고(true) \n이면 나간다는 의미입니다. 즉 개행문자 나올때까지 돌려서 없앤다는 뜻이죠.
17/05/26 16:04
|