본문 바로가기
C++ Programming/기억해야할 점

1. 입력

by 쵸빙 2020. 5. 3.

#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