4.10 scanf() 함수의 사용법

공기훈·2021년 8월 10일
0

홍정모의 따배씨

목록 보기
13/49

multiple inputs with blank seperators

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <inttypes.h> // intmax_t

int main()
{
	int i;
	float f;
	char str[30];
	scanf("%d %f %s", &i, &f, str); // Note % is absent in front of str
	printf("%d %f %s\n", i, f, str);

charcter

	char c;
	scanf("%c", &c); // try blank
	printf("%i\n", c); // blank is 32 

위의 예시에서 아스키 코드 출력하라고 명령. 위의 예제에서는 빈칸을 무시했지만, 문자로 입력 받는 상황에서는 빈칸도 문자 처리 한다.

Unsigned as signed

	unsigned i;
	scanf("%i", &i); // try negative number
	printf("%i\n", i);

unsigned 이지만, 받을 때 signed로 받고 다시 signed로 꺼내기 때문에 상관은 없는 상황.
하지만 깔끔한 코딩이 아니고 다른 사람이 헷갈릴 수 있으니 unsignedunsigned로 대접하자.

Unsigned as unsigned

	unsigned i;
	scanf("%u", &i); // try negative number
	printf("%u\n", i);

대신 이렇게 하면 음수를 집어넣으면 overflow가 발생한다.

floating point numbers

	// l for double for %f, %e, %E %g
	double d = 0.0;
	scanf("%lf", &d);
	printf("%f\n", d);

scanf 에서는 double을 항상 lf로 받아주어야 한다.

Width

	char str[50];
	scanf("%5s", str);
	printf("%s\n", str);

너비가 5로 지정되어 있으므로 많이 입력해도 앞의 5자리만 출력된다.

h modifier

	char i;
	scanf("%hhd", &i);
	printf("%i\n", i);

이런 경우는 당연히 큰 수를 넣게 되면 다른 값이 나오게 된다.

integer with characters

	int i;
	scanf("%i", &i);
	printf("%i\n", i);

123dk23을 입력하면 123만 출력.
즉, 문자를 만나면 멈춘다.

j modifier

	intmax_t i;
	scanf("%ji", &i);
	printf("%i\n", i);

Regular characters

	int a, b;
	scanf("%d,%d", &a, &b); // try blank separator only
	printf("%d %d\n", a, b);

평소의 경우는 (number)(blank)(number) 였지만 위와 같이 ,같은 문자가 들어간 경우는 (number),(number) 처럼 입력해야한다.
scanf("%d ,%d", &a, &b); 와 같이 입력한다면, 가운데 빈칸이 많이 와도 무시하고 출력한다.
"%dK%d" 이런 식으로 쓰면 ,와 같은 방식으로 입력하면 된다.

char recieves blank

	int a, b;
	char c;
	scanf("%d%c%d", &a, &c, &b); // try 123 456 (blank)
	printf("%d|%c|%d\n", a, c, b); // | is seperator

return value of scanf()

	int a, b;
	int i = scanf("%d%d", &a, &b);
	printf("%d", i); 

이 경우 a와 b에 각각 값을 입력하면 2가 return이 된다. 2가지가 입력되었으므로 2가 출력된다.

*modifier for printf()

	int i = 123;
	int width = 5;
	printf("input width : ");
	scanf("%d", &width);
	printf("%*d\n", width, i); 

1을 입력하면 123의 너비인 3보다 좁으므로 123이 그대로 출력된다.
그러나 5와 같은 큰 숫자를 입력하게 되면 __123이 출력되게 된다.

*modifier for scanf()

	int i;
	scanf("%*d%*d%d", &i);
	printf("Yout third input = %d", i); 

	return 0;
}   

입력은 123 456 789 이런 식으로 받고, 출력은 뒤의 789만 출력이 된다.

profile
be a coding master

0개의 댓글