2011. 10. 12. 20:04

"%[parameter][flags][width][.precision][length]type"

Parameter 

Character 

Description 

n$ 

파라미터 지정

This is a POSIX extension and not in C99.

Example: printf("%2$d %1$#x %1$d",16,17) produces "17 0x10 16"

 

Flags

Character 

Description 

+ 

양수 '+', 음수 '-' 기호 출력. (디폴트 : 아무것도 표시 안함)

- 

좌측 정렬

# 

8진수, 16진수 출력시 각각 0과 0x를, 실수의 경우 소수점 이하 0을 출력

' '공백

출력할 크기가 0보다 클 때 수의 앞에 빈 칸 하나 출력

0 

빈공간을 0으로 체움

 

Width

Character

Description 

* or N

폭 지정 (*와 같은 경우 숫자와 대응)

Example: printf("%*d", 5, 10) will result in " 10" being printed with a width of 5.

 

Precision

Character 

Description 

* or N

정밀도 지정 (*와 같은 경우 숫자와 대응)

정수의 경우-> 지정한 숫자보다 개수가 작을 경우 나머지 0으로 표시

실수의 경우-> 소수점 자리 수

문자열의 경우-> 지정한 개수만큼의 문자 표시

Example: printf("%.*s", 3, "abcdef") will result in "abc" being printed.

 

Length

Character 

Description 

h 

정수 자료형 감소 (int-> short)

hh 

정수 자료형 2번 감소 (int-> short-> char)

l 

정수 자료형 증가(int-> long)

ll 

정수 자료형 2번 증가(int-> long-> long long)

L 

실수 자료형 증가 (long -> long double)

z 

For integer types, causes printf to expect a size_t sized integer argument.

j 

For integer types, causes printf to expect a intmax_t sized integer argument.

t 

For integer types, causes printf to expect a ptrdiff_t sized integer argument.

 

Type

Character 

Type

Description 

d, i 

int 

부호 있는 10진수 정수

u 

unsigned int 

부호 없는 10진수 정수

o 

unsigned int 

부호 없는 8 진수 정수

x, X 

unsigned int 

부호 없는 16진수 정수

f, F 

double 

10진수 방식의 부동 소수점 실수

e, E 

double 

지수 형식으로 출력

g, G 

double 

%e와 %f 중 짧은 쪽, 소수점에 이어지는 0은 생략

c 

int 

값에 대응하는 문자

s 

char * 

문자열

p 

void * 

포인터 주소값

n 

int * 

포인터 주소값

% 

literal '%' 

리터럴 '%' 문자( 플래그, 폭, 정밀, 길이 허용 안함)

Posted by devanix
2011. 10. 8. 02:41

<stdlib.h>

int rand ( void );

void srand ( unsigned int seed );

 

#define RAND_MAX 2147483647 (32bit 리눅스 시스템 기준)

리턴값

rand : 0부터 RAND_MAX 사이의 의사 난수를 생성 반환.

설명

rand()는 0부터 RAND_MAX 사이의 난수를 생성하지만,

문제는 프로그램을 새로 실행할 때 마다 매번 다른 난수를 만들어 내지 않고

계속 같은 난수를 반복합니다.

그래서 srand()를 사용하여 의사 난수를 생성하기 위해서 난수의 생성 초기값인

seed값을 지정합니다. (보통 seed는 srand((unsigned) time(NULL))로 설정)

 

srand()가 호출되기 전에 rand()가 호출되면 디폴트 값은 1이 됩니다.

 

보통 seed는 srand((unsigned) time(NULL))로 지정하지만 time()는 초 단위이기 때문에

1초 이내에 여러 번 실행하게 되면 같은 난수가 중복되기 때문에 getpid()와 함께

사용합니다. getpid()는 같은 프로그램을 실행해도 매번 실행할 때 마다

프로세스 아이디가 계속 증가되기 때문에 매번 다른 값을 반환하게 됩니다.

이런 이유로 time()같이 사용합니다.

 

예 : srand( (unsigned)time(NULL)+(unsigned)getpid() );

 

 

[ rand의 난수 생성범위에 따른 함수 사용 방법: ]

난수 생성범위

프로그램 연산식

설명

1 <= 정수난수 <= 45

rand() % 45+1;

45로 나눈 나머지 값의 범위는 0~44,

이 값에 1을 더하므로 1~5 사이의 난수 생성

0 <= 정수난수 <= 99

rand() % 100;

100으로 나눈 나머지 값의 범위는 0~99이므로

0~99 사이의 난수 생성.

10 <= 정수난수 <= 30

rand() % 21 + 10;

21로 나눈 나머지 값의 범위는 0~20,

이 값에 10을 더해주면 10~30 사이의 난수 생성.

-5 <= 정수난수 <= 5

rand() % 11 - 5;

11로 나눈 나머지 값의 범위는 0~10,

이 값에 5를 감해주면 -5~+5 사이의 난수 생성.

0 <= 실수난수 <= 1

rand()/(double)RAND_MAX

0~RAND_MAX의 사이의 난수를 다시 (double)RAND_MAX로 형변환된 실수로

로 나눔으로써 0~1 사이의 실수 난수를 생성.

 

Example : lotto 번호 생성

'API 및 라이브러리 > C 라이브러리 함수' 카테고리의 다른 글

sleep(3)  (0) 2011.02.12
strdup(3)  (0) 2010.09.14
strstr(3)  (1) 2010.09.11
system(3)  (0) 2009.12.19
getusershell(3)  (0) 2009.12.19
Posted by devanix
2011. 10. 7. 21:20

 

ASCII 코드는 미국에서 표준화한 데이터 처리 및 통신시스템 상호간의 정보교환용 표준 부호체계를 의미한다.

이 당시 문자(Character)를 표현 하는데 7bit를 1byte로 사용하였고,

이후 메모리의 구조가 변화됨에 따라 8bit를 1byte로 구성하게 되었다.

 

ASCII 코드는 모두 256(개의 부호를 두 개의 집합, 즉 표준 집합(standard set)과 확장 집합(extended set)으로 구분.

표준 집합 : 십진수 0~127(16진수 0x00~0x7f)가지 128개 문자 부호 제공.

(제어문자, 알파벳 대문자와 소문자, '0'~'9'까지의 숫자 그리고 일반적으로 사용되는 특수 기호로 구성)

확장 집합 : 십진수 128~255(16진수 0x80~0xff)가지 128개 문자 부호를 추가로 제공.

(컴퓨터 업체나 프로그래머로 하여금 여러 다양한 문자를 할당하여 사용할 수 있도록 하였기 때문에 일반적으로

통용되는 코드 집합이 아니며 컴퓨터 제조 회사나 국가별로 차이가 있다)

 

제어 문자(control characters) : 0부터 ~ 31까지(16진수로 0x00 ~ 0x1f)는

TAB, CR(Carriage Return), LE(line Feed)등의 제어 문자를 표현하기 위한 용도.

출력 가능한 문자(printable characters) : 32부터 ~ 126까지 출력으로 확인 가능한(Printable)문자들로 구성.

 

Standard ASCII Codes

 

Extended ASCII Codes

Posted by devanix