게시글
질문&답변
2020.08.31
8.5 2분
헐 진짜 저거 실행해봤더니 감이 와요.. 너무 신기해요 왜 오류가 그렇게 났는지 알 것 같아요 제가 제 질문에 이해한 걸 토대로 답해보자면 Q1. 이 부분은 제가 추측한 게 맞는 것 같아요 선생님께서 주신 코드에서도 scanf가 처음에 정수형 하나를 입력으로 받고 버퍼에 \n밖에 없으니까 다시 입력을 달라고 깜빡거린거처럼요.. Q2. scanf는 정수형을 원한건데 문자가 들어오니까 그대로 종료해버려서 결국 띄어쓰기와 원래 변수에 들어있던 3, 3이 그대로 display로 들어가 실행된 것 같아요 Q3. 여기는 좀 긴가민가해요.. 일단 버퍼에서 \n이 사라지고 아예 b,1,2만 남아있어서 저렇게 실행된 것 같아요. 위에 2번 질문과 연결되는데 scanf가 일단 버퍼에 '(sp)\n'만 남아있는 상태에서 문자로 sp를 읽어들여 c에 저장하고, 정수형이 없으니까 콘솔창을 통해 읽어들이려고 \n을 삭제한 것 같아요.. 결국 정수형이 아니라 문자가 들어와서 무시해버렸지만, 일단은 버퍼에서 사라진 게 아니니까 그 다음 루프에서 scanf가 b, 1, 2를 읽어들이고.. 제가 이해한 게 맞나요?? 버퍼 배우니까 왜 c언어를 로우레벨 언어라고 하는지 알 것 같아요..
- 2
- 3
- 232
질문&답변
2020.08.27
6.1 1분 40초
두번째 질문 해결했어요!! 제가 넣었던 값이 4 4 였는데, 디버깅 하면서 첫번째 값이 사라지는 것과 더불어서 sum = sum + num때문에 값이 한 번 더 더해진다는 걸 알게됐습니다!! 3이랑 5를 집어넣으니까 5가 두번 더해져서 10이 나오더라구요.. 첫번째 질문도 %c로 받도록 바꾸고 디버깅을 해보았는데 숫자를 c로 받으니까 정수가 아닌 문자로 받더라구요.. 그래서 이렇게 하면 안된다는 건 알겠는데 다른 오류도 발생해서 질문올립니다 밑에 올린 캡처처럼 next를 물어보는 질문이 두개가 떠요.. 디버깅을 해보니까 while문이 두번 돌아간거던데 하나는 입력을 해도 아예 무시하더라구요 왜그런거죠? #include int main(void) { int first; char next = 0; printf("Enter an integer (q to quit) : "); scanf("%d", &first); while (next != 'q') { printf("Enter next integer (q to quit) : "); scanf("%c", &next); first = first + (int)next; } printf("Sum = %d", first); return 0; } (사진)
- 0
- 3
- 264