PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2017/05/26 14:16:52
Name 세잎클로버
Subject [질문] 프로그래밍 질문입니다..
그 버퍼 지우는 함수중에

#include
void clear(void)
{
while(getchar()!='n')
}

int main()
{
int perid[7];
int name[9];

printf("Input PerID:);
fgets(perid,sizeof(perid),stdin);//123456 입력
fputs(perid,stdout);
clear();

printf("input name");
fgets(name,sizeof(name),stdin);
fputs(name,stdout);
}
perid 일때123456 입력하면
그 perid에 마지막 버퍼 'n'이 남자나요
거기서 clear 함수를 돌려버리면 와일문에서
'n'은 거짓이기때문에 실행이 안되어서 그대로 n이 남아야되는데 지워지더라구요
제 생각에는 do while로 돌려야 된다고 생각하는데
왜 입력버퍼가 'n'인데 저 와일문이 실행되어서 지워지는걸까요??


ps.질문 자주올려서 죄송합니다

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
세츠나
17/05/26 14:23
수정 아이콘
무슨 말씀인지...개행문자 말씀하시는 건가요?
세잎클로버
17/05/26 14:26
수정 아이콘
네 개행문자요 그 fgets함수가 'n'까지 전부 읽어드리잖아요.그러면 배열 123456 출력되고 7번째에 'n'이 남아있기때문에 clear함수에 들어가게되면 while문 조건이 'n'이 아닐떄 입력버퍼를 실행시킨다는 조건인데 그렇다면 마지막 버퍼가 'n'이면 쓸모없는 함수여야 정상인데 왜 와일문이 실행되서 'n'버퍼가 지워지는지 이해가 안되서요..
17/05/26 14:28
수정 아이콘
개행은 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이 나올때가지 실행시키는 거엿꾼요..감사합니다
MDIR.EXE
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 14:52
수정 아이콘
넵 감사합니다 !
17/05/26 14:30
수정 아이콘
\n
17/05/26 14:30
수정 아이콘
두번 쓰니깐 제대로 표기되네요 크크
AirQuick
17/05/26 14:54
수정 아이콘
perid 배열이 int로 선언되어있어서 그렇습니다. char로 바꾸면 생각하신대로 동작할겁니다.
MDIR.EXE
17/05/26 16:13
수정 아이콘
그리고 위의 지적대로 perid나 name은 char로 바꿔야합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
175847 [질문] 큐브 실력(?)을 늘리려면 어떻게 해야될까요? [5] 앙스1005 24/04/19 1005
175846 [질문] 중고차 구입방법 질문합니다. [16] 보아남편870 24/04/19 870
175845 [질문] 부동산 관련 기초 상식, 용어들을 비유를 통해 설명해주실분들....계실까요? [14] 요하네즈740 24/04/19 740
175844 [질문] chatPDF 같은 서비스가 더 있을까요? [2] 리얼포스723 24/04/19 723
175843 [질문] '실리콘파워' 라는 브랜드 이름 있는 브랜드 인가요? [1] 밥도둑1687 24/04/18 1687
175842 [질문] 햄버거 빵대신 양상추로 싸주는 프랜차이즈 버거집 있나요..? [4] 하카세2215 24/04/18 2215
175841 [질문] 미국주식 양도세 관련 질문드립니다 [6] 보리야밥먹자1469 24/04/18 1469
175840 [질문] 선릉 ~ 잠실 사이에 괜찮은 초밥집 추천 부탁드립니다. En Taro1156 24/04/18 1156
175839 [삭제예정] 재산처리 관련 법적인 내용 질문 드립니다. [1] 포커페쑤1257 24/04/18 1257
175838 [질문] 아버님께 드릴 선물을 사야하는데 뭐가 좋을까요? [7] LowCat773 24/04/18 773
175837 [질문] 맥북이 작동되지 않습니다 [2] 자루스588 24/04/18 588
175836 [삭제예정] 지인의 차 사고 질문 [2] 삭제됨987 24/04/18 987
175835 [삭제예정] 축의금 관련 질문드립니다. [24] 인천테란1881 24/04/18 1881
175834 [질문] 간헐적 인터넷 끊김 조언 부탁드려요 [16] 탄야1118 24/04/18 1118
175833 [질문] 설/추석 명절 홍콩 가보신 분 계신가요? [5] LG의심장박용택1098 24/04/18 1098
175832 [질문] 비행기 조종 게임이나 시뮬레이션 관련 질문 [4] 지니팅커벨여행972 24/04/18 972
175831 [질문] 재미로 코딱지 파는 심리를 분석해 보려고 합니다(설문 요청). [13] 인생을살아주세요1457 24/04/18 1457
175829 [질문] 워드에서 영단어 마지막글자가 지워지는 증상? [2] beloved1008 24/04/18 1008
175828 [삭제예정] 미국주식 양도소득세 계산시 이동평균법으로 신고하는 방법이 있을지요...? [19] nexon2647 24/04/17 2647
175827 [질문] 엑셀 고수분들께 요청 드립니다. [6] 귀여운호랑이2474 24/04/17 2474
175826 [질문] 부모님 해외여행 질문드립니다 [6] 리코타홀릭2303 24/04/17 2303
175825 [질문] 엑셀 텍스트나누기 함수 질문 [5] possible1924 24/04/17 1924
175824 [질문] 읽기 쉬운 소설 또는 책 추천 [39] 작은마음2612 24/04/17 2612
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로