Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

KNK Chap.3 (Q&A) 본문

C

KNK Chap.3 (Q&A)

Daryl 2022. 12. 14. 15:14

Q: scanf()에서 %i 대신 %d를 많이 쓰는 이유는?

 

A: %i가 10진수, 8진수, 16진수까지 인식 가능하다 보니 만약 입력값이 0으로 시작하면

%i는 해당 입력값을 8진수로 취급함. 입력값이 0x나 0X로 시작하면 16진수로 취급함.

그래서 10진수만 취급하는 %d를 많이 씀.

 

Q: printf()가 %을 변환규격의 시작으로 인식하면, %의 출력 방법은? 

 

A: %% 이렇게 쓰면 된다. 예시 ↓

printf("순이익: %d%%\n", profit);

출력하면 순이익 10% 라고 나올 것임.

 

Q: \t 확장비트열을 printf에서 사용하면 다음 탭로 넘어가는데, 탭 하나 당 빈칸 개수는?

 

A: 알 수 없음. C에서 \t의 효과를 따로 정의하는게 아니라 당신이 쓰는 운영체제에 따라 결정됨.

굳이 말하자면 주로 8칸인데 전부 그런건 아님.

 

Q: scanf()가 숫자를 읽어야 할 때 숫자가 아닌 값을 입력해주면 그 결과는?

A: 예시 ↓

printf("숫자를 입력하세요: );
scanf("%d", &i);

사용자가 해당 코드에 23foo 라고 입력했다 치자.

그럼 scanf()는 2와 3을 읽고 i에 저장함. 나머지 문자 foo는 scanf나 기타 입력 함수 호출 때 사용됨.

 

반대로 foo만 입력된다면?

i의 값은 정의되지 않음. foo는 다음 scanf에 맡겨짐.

 

그러면 scanf()가 정상적으로 작동했는지 어떻게 아냐고? 나중에 배울 것임 :) 

 

Q: scanf가 문자를 뒤로 "미룬다"는 비유의 정확한 뜻은? [scanf()의 작동 방식]

 

A: 프로그램은 유저가 입력한대로 입력값을 읽지 않고, scanf()의 숨겨진 버퍼에 저장됨.

scanf()는 계속해서 읽기 과정을 진행하기 위해 이 버퍼에 문자를 미뤄두는게 가능함.

입력 버퍼에 대해서는 chap 22 에서 구체적으로 배움.

 

Q: 사용자가 쉼표 등이 구두점을 찍으면 scanf()의 반응은?

 

A: 예시 ↓

scanf()를 통해 두개의 정수짝을 입력받는다고 치자.

printf("두 개의 숫자를 입력하세요.: ");
scanf("%d%d", &i, &j);

사용자가 4, 28 이라고 입력했다 치자.

그럼 scanf()는 4를 읽고 i에 저장할 것임. 그후 두번째 숫자를 찾겠지? 

이때 ,를 다음으로 읽게 될 것임. 숫자는 쉼표로 시작하지 않으닌까 scanf()는 종료됨.

, 28 은 다음 scanf 호출 때로 미뤄짐. 

물론 서식 문자열에 쉼표를 더해주는 걸로 해결 가능 ↓

printf("두 개의 숫자를 입력하세요: ");
scanf("%d,%d", &i, &j);

 

'C' 카테고리의 다른 글

KNK Chap.4 (4.2~4.3)  (0) 2022.12.14
KNK Chap.4 (4.1)  (0) 2022.12.14
KNK Chap.3 (3.2)  (1) 2022.12.14
KNK Chap.3 (3.1)  (1) 2022.12.07
KNK Chap.2 (2.8~Q&A)  (0) 2022.12.06
Comments