#include <stdio.h>를 한 다음 scanf로 입력할 때 기억해야할 점을 정리해보았다.
1. char 두 개 space로 띄워서 입력받기
scanf("%c %c", &a, &b); 이런 식으로 중간에 스페이스를 주고 입력받는다.
아니면 space까지 char로 인식한다.
2. 중간에 문자가 있을 때
마찬가지로 scanf("%d:%d", &a, &b); 이렇게 하면 자동으로 :는 무시한다.
printf로 그대로 출력하려면 printf("%d:%d", a, b); 이런 식으로 해당 문자를 그대로 중간에 넣어주면 됨.
3. 공백문자가 없는 문자열 입력받기
만약 문자열이 50자리 이내라는 것을 안다면 char 배열을 51자리로 만든다. 왜냐하면 문자열의 맨 마지막에는 null 문자인 '\0'이 입력되기 때문이다.
char data[51] = "";
scanf("%s", data);
4. 공백문자가 있는 문자열 입력받기
char data[2001];
fgets(data, 2000, stdin);
fgets를 사용하면 엔터로 구분하고, space까지 포함하여 읽어들인다.
5. int와 unsigned int형
int형은 -2147483648 ~ +2147483647 범위의 정수
unsigned int형은 0 ~ 4,294,967,295 범위의 정수
unsigned int형을 입력받으려면
unsigned int a;
scanf(“%u”, &a);
6. float형과 double형
float형의 범위 : +- 3.4*10-38 ~ +- 3.4*1038
double형의 범위 : +- 1.7*10-308 ~ +- 1.7*10308
double형을 입력받으려면
double a;
scanf(“%lf”, &a);
7. long long int형
long long int는 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 범위.
scanf(“%lld”, &n);
printf(“%lld”, &n);
8. 8진수 입력받아 10진수로 출력
int n;
scanf(“%o”, &n);
printf(“%d”, n);
C언어에서 소스 코드 작성 시 0으로 시작하는 수는 8진수로 인식된다.
int a = 013; // 10진수 11과 같은 값
9. EOF까지 입력받기
while (scanf("%d", &n) != EOF)
while (scanf("%d", &n) != -1)
while (~scanf("%d", &n))
10. 입력함수 속도
cin >>> scanf >> getchar;
11. scanf 엔터 무시
① getchar() 이용
scanf("%d", &a);
getchar();
scanf("%d", &c);
→ getchar을 이용해서 \n을 받는다. 그럼 버퍼가 비워지고 새롭게 scanf를 받을 수 있다.
② fflush(stdin)
비주얼 스튜디오나 GCC에서는 동작하지 않는다. 과거에는 VS에서 지원을 했지만 여러가지 문제로 사라졌다.
③ %c 앞에 공백
scanf(" %c", &c)를 사용하여 앞에 스페이스를 넣으면 \n을 white space로 인식하여 넘긴다.
④ %*c를 추가하여 데이터를 버린다.
scanf("%*c%c", &c)를 사용하면 첫번째 %*c에서 버퍼를 받지만 버리고, 다음 %c를 통해 데이터를 받는다.
계속 공부해나가면서 입력과 관련하여 기억해야할 점을 채워나가겠다.
'C++ Programming > 기억해야할 점' 카테고리의 다른 글
6. 문자열 다루기 (0) | 2020.05.03 |
---|---|
5. 알고리즘 (0) | 2020.05.03 |
4. switch문, goto문 (0) | 2020.05.03 |
3. shift, bool, 논리 연산자, 3항 연산자 (0) | 2020.05.03 |
2. 출력 (0) | 2020.05.03 |