일
KNK Chap.3 (Q&A) 본문
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 |