① 형식변환문자 (%d)
② 구분자 : 여러 개의 데이터 입력 시 데이터 사이를 구분하기 위한 문자 → space, tab, enter
(단, 마지막 형식변환문자 뒤에는 구분자를 쓰지 않는다.)
반드시 주소를 지정 (주소 추출 연산자 & 사용)
(단, 배열명의 경우는 배열명 자신이 그 배열의 시작주소를 의미하기 때문에 주소 추출 연산자 사용하지 않음)
#include <stdio.h>
int main() {
int a;
scanf("%d", a);
return 0;
}
① scanf는 데이터를 가져가려고 stdin buffer를 확인
② 비어있는 stdin buffer는 줄 수 있는 게 없음
③ stdin buffer가 모니터의 커서를 보여주어 입력값을 달라고 요구
④ 사용자가 적절한 값 입력
⑤ scanf는 stdin buffer에 있는 값을 가져가 저장
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
return 0;
}
① 사용자가 구분자와 함께 10, 20, 30을 입력
② 각각의 값이 하나의 문자로 stdin buffer에 저장 (숫자도 ASCII 코드 값이 들어감)
③ scanf의 첫번째 %d가 구분자(여기서는 공백)전까지 데이터를 꺼내 숫자로 변환시켜 저장
%d : '0' ~ '9', '+', '-' 만 가져갈 수 있음.
%f : '0' ~ '9', '+', '-', '.'만 가져갈 수 있음.
④ 두번째 %d는 보자마자 구분자(공백)를 만남 → 여기서는 공백을 buffer에서 날려버리고 다음부터 데이터를 읽어 저장
⑤ ④와 같은 방식으로 데이터 저장
모든 입력이 끝나면 개행문자만 buffer에 남게 된다.
void myflush() {
char ch;
ch = getchar();
while(ch != '\n') { ch = getchar(); }
return 0;
}
변경자 | 의 미 |
* | 값을 입력은 받으나 그 값을 변수에 저장하지 않는다 ex) %*d |
10진수 | 최대필드 폭, 문자열 입력 시 첫번째 여백 문자를 만나거나 최대 필드 폭에 도달하면 입력을 중지한다 ex) %5s, %3d |
h, l, ll 또는 L | short, long, long long, long double형으로 입력 받을 때 사용 ex) %hd, %ld, %lld, %lf, %Lf |
ex) scanf ("%d %*d %d", &a, &b); // 10 20 30 입력 : 10은 첫번째 %d로, 20은 저장x, 30은 두번째 %d로 저장
ex) scanf("%5s", str); // strawberry 입력 : straw까지 저장
사용자가 직접 구분자를 정해서 사용하고 싶을 때 사용
#include <stdio.h>
int main() {
int a, b, c;
int res;
res = scanf("%d:%d:%d", &a, &b, %c);
printf("res = %d, a = %d, b = %d, c = %d\n", res, a, b, c);
return 0;
}
#include <stdio.h>
int main() {
char ch;
while ((ch = getchar()) != EOF) {
if(ch >= 'a' && ch <= 'z') { ch -= 'a' - 'A'; }
else if (ch >= 'A' && ch <= 'Z') { ch += 'a' - 'A'; }
putchar(ch);
}
return 0;
}
[TIL] 4 - 2. 제어문의 이해 - 다중 for와 do ~ while의 이해 (0) | 2022.03.16 |
---|---|
[TIL] 4 - 1. 제어문의 이해 - switch ~ case문의 이해 (0) | 2022.03.16 |
[TIL] 3 - 1. 표준 입출력 함수 - printf( ) (0) | 2022.03.03 |
[TIL] 2 - 5. 데이터형 - 형변환의 이해 (0) | 2022.03.01 |
[TIL] 2 - 4. 데이터형 - 문자열형의 이해 (0) | 2022.03.01 |
댓글 영역