시스템 함수 
 
C에서는 프로그램의 실행을 종료하고 제어를 운영체제에게 돌려주는 함수와 시스템 명령을 수행할 수 있는 함수를 제공합니다. 
stdlib.h에 정의 되어 있습니다. 
 
 

1) exit 함수 
이 함수는 프로그램의 실행을 종료하고 제어를 운영체제에게 돌려주는 함수입니다. 
이 함수의 매개 변수로 0를 주면 성공을 알리고 운영체제에게 리턴하며 1을 주면 실패를 알리고 운영체제에게 제어를 넘겨주게 됩니다. 
 
 

예제21) exit()의 사용 
#include
<stdlib.h>

int main() 
    printf("Exit를호출하면이후문장은수행되지않습니다\n"); 
    exit(0); 
    printf("의미없는문장\n"); 
    return 0; 
}

 
 

2) system 함수 
운영체제의 시스템 명령을 수행할 수 있도록 해주는 함수입니다. 
예제22) system()의 사용 
#include
<stdio.h>

#include
<stdlib.h>

#include
<conio.h> 
int main() 
    printf("메모장실행\n"); 
    system("notepad.exe"); 
    printf("메모장을종료하면서자신의ping 확인"); 
    system("ping 127.0.0.1 -t"); 
    return 0; 
}
Posted by cyj4369
,
시간 관련 함수(time.h) 
 
모든 시간 함수의 원형은 time.h 헤더 파일에 선언되어 있으므로 시간 관련 함수를 사용하려면 반드시 time.h를 인클루드 해야 합니다. 
시간과 관련된 가장 기본적인 함수는 현재 시간을 구하는 time 함수이다. 
time_t time( time_t *timer ); 
char *ctime( const time_t *timer ); 
time 함수는 1970년 1월 1일 자정 이후 경과한 초를 조사하는데 리턴 타입인 time_t형은 시스템에 따라 달라지며 Windows에서는 4바이트 정수(typedef long time_t;)로 정의되어 있습니다. 
time 함수는 time_t형의 포인터를 인수로 받아 이 인수에 조사된 시간을 채워 주기도 하고 같은 값을 리턴 하기도 합니다. 
둘 중 아무 값이나 사용해도 상관없으며 리턴 값만 사용할 경우는 인수로 NULL을 전달할 수도 있습니다. 
이 함수는 최대 2038년 1월 18일까지의 날짜를 표현할 수 있으며 64비트 버전인 _time64 함수는 3000년 12월 31일까지 표현 가능합니다. 
이 함수가 조사하는 시간은 초 단위이기 때문에 이 값으로부터 우리가 일상적으로 사용하는 시간을 바로 구하기는 무척 어렵습니다. 
또한 세계 표준시 포맷으로 되어 있어 우리나라 시간과 일치하지도 않습니다. 
ctime 함수는 time_t형의 경과 초를 출력하기 편리한 문자열 형태로 바꾸며 세계 표준시로 된 시간을 지역 설정에 맞게 조정해 주기도 합니다. 
변환된 문자열은 26문자 길이로 되어 있으며 끝에 개행 문자가 있어 printf 등의 함수로 곧바로 출력할 수 있습니다. 
ctime이 변환 결과를 저장하기 위해 사용하는 버퍼는 라이브러리에서 미리 할당해 놓은 정적 메모리 영역이며 이 영역은 asctime, gmtime, localtime 등의 함수들이 공유합니다. 

예제4) 현재 시간 출력 
#include <stdio.h> 
#include <time.h> 
int main() 
time_t t; 
time(&t); 
printf("현재 시간은 %d입니다.\n", t); 
printf("현재 시간은 %s입니다.\n", ctime(&t)); 
return 0; 
}

 
 

char *_strdate(char *datestr); => 현재 날짜를 문자열로 리턴 
char *_strtime(char *timestr); => 현재 시간을 문자열로 리턴 
 
 

_strdate는 날짜를 MM/DD/YY 포맷으로 구해 datestr 버퍼에 복사하며 _strtime은 시간을 HH:MM:SS 포맷으로 구해 timestr 버퍼에 복사하는데 이 함수가 구해주는 시간은 24시간제입니다. 
두 함수로 전달되는 버퍼는 널 문자까지 고려하여 최소한 9바이트 이상이어야 합니다. 
 
 

예제5) 현재 날짜와 시간을 출력하는 예제 
#include <stdio.h> 
#include <time.h> 
int main() 
char Date[10]; 
char Time[10]; 
_strdate(Date); 
_strtime(Time); 
printf("날짜: %s, 시간: %s\n",Date,Time); 
     return 0; 
}

 
 

clock_t clock( void ); 
작업 시점의 시간을 출력해주는 함수 
처음 호출하면 0을 가지게 되고 두 번째 호출하게 되면 첫 번째 호출한 시점에서 경과한 시간을 리턴 시켜 주게 됩니다. 
예제6) for 문을 10000번 돌리는 데 걸리는 시간 
#include <stdio.h> 
#include <time.h> 
int main() 
    clock_t t1, t2; 
    int i; 
    t1=clock(); 
    for(i=0; i<10000; i++) 
    { 
        t2 = clock(); 
        printf("i=%d t2=%d\n",i,(t2-t1)); 
    } 
}

 
 

일정시간 동안 대기하는 sleep 함수 만들기 
#include
<stdio.h> 
#include
<time.h> 
void sleep(int n); 
int main() 
    int i; 
    for (i=1; i <= 10; i++) 
    { 
        printf("*"); 
        sleep(1000);      
    } 
void sleep(int n) 
    long time; 
    time = n + clock(); 
    printf("잠시대기\n"); 
    printf("%ld\n", time - clock() ); 
    while( time > clock() ) 
    {         
    } 
}



Tip. 조금 더 정확한 시간을 알고 싶다면??
STSREMTIME 구조체 사용
typedef struct _SYSTEMTIME { // st WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME;
SYSTEMTIME SysTime;
GetLocalTime(&SysTime);
//%03d : 000포맷으로 빈 곳은 0으로 채움 19면 019로 표현 
printf("%02d, %03d",SysTime.wSecond, SysTime.wMilliseconds);

Posted by cyj4369
,
숫자와 문자열 변환 함수(stdlib.h) 
 
숫자와 문자열을 변환해주는 함수 
char *itoa(int value, char *string, int radix); 
int 형을 문자열로 변경 
char *ltoa(long value, char *string, int radix); 
long 형을 문자열로 변경 
char *ultoa(unsigned long value, char *string, int radix); 
unsigned long을 문자열로 변경 
 
 

예제18) itoa를 이용해서 10을 진법 별로 문자열로 변환 
#include <stdio.h> 
#include <stdlib.h> 
int main() 
    char str[100]; 
    int i = 10; 
    itoa(i,str,10); 
    printf("str = %s\n",str); 
    itoa(i,str,8); 
    printf("str = %s\n",str); 
    itoa(i,str,16); 
    printf("str = %s\n",str); 
    itoa(i,str,2); 
    printf("str = %s\n",str); 
    return 0; 
}

 
 

int atoi(const char *string); 
문자열을 정수로 변환 
숫자와 문자가 섞여 있다면 숫자가 있는 부분까지만 변환 
long atol(const char *string); 
문자열을 long 형 정수로 변환 
double atof( const char *string ); 
문자열을 double 형 정수로 변환 
long strtol(const char *nptr, char **endptr, int base); 
base 진법까지 인정해서 변경해줌. 
변환 불가능한 문자를 만나면 endptr로 리턴 
 
 

예제19) itoa를 이용해서 10을 진법 별로 문자열로 변환 
#include <stdio.h> 
#include <stdlib.h> 
int main() 
    char str[10] = "12car"; 
    int i; 
    i = atoi(str); 
    printf("i = %d\n",i); 
    i = strtol(str, NULL, 10); 
    printf("i = %d\n",i); 
    i = strtol(str, NULL, 10); 
    printf("i = %d\n",i); 
    i = strtol(str, NULL, 16); 
    printf("i = %d\n",i); 
    i = strtol(str, NULL, 8); 
    printf("i = %d\n",i); 
    i = strtol(str, NULL, 2); 
    printf("i = %d\n",i); 
 
 

    return 0; 
}
Posted by cyj4369
,
수학 함수(math.h) 
 
double sin(double x) => sin 
double cos(double x) => cos 
double tan(double x) => tan 
double sqrt(double x); => x의 제곱근 
double pow(double x, double y) => xy 
double floor(double x) => 소수 버림 (반올림은 0.5를 더한 후 소수를 버리면 됩니다. )
double ceil(double x) => 소수를 버리고 정수 값을 1증가 
int abs(int n) => 절대 값 
long labs(long n) => 절대 값 
double fabs(double x) => 절대 값 
 
예제1) 기본적인 수학 함수의 사용 
#include
<stdio.h> 
#include
<math.h> 
int main() 
int r; 
for (r=0;r<=90;r+=10) 
printf("sin(%d도)=%f\t",r,sin(r*3.1416/180)); 
    printf("cos(%d도)=%f\t",r,cos(r*3.1416/180)); 
    printf("tan(%d도)=%f\n",r,tan(r*3.1416/180)); 
    printf("25의제곱근= %.2f\n", sqrt(25)); 
    printf("5의3제곱= %.2f\n", pow(5,3)); 
    printf("5.4의소수버림결과= %f\n", floor(5.4));
    printf("5.4의소수올림결과= %f\n", ceil(5.4)); 
    printf("-5.4의소수버림결과= %f\n", floor(-5.4)); 
    printf("-5.4의소수올림결과= %f\n", ceil(-5.4)); 
    printf("5의절대값= %d\n", abs(5)); 
    printf("-5의절대값= %d\n", abs(-5)); 
    printf("5.4의절대값= %f\n", fabs(5.4)); 
    printf("-5.4의절대값= %f\n", fabs(-5.4)); 
return 0; 
}
Posted by cyj4369
,
문자 함수(ctype.h) 
 
1) 문자 판단 함수 
isalnum(문자): 영문자 또는 숫자인 경우만 참을 리턴 
isalpha(문자): 문자가 영문자인 경우만 참을 리턴 
isdigit(문자): 문자가 숫자인 경우만 참을 리턴 
islower(문자): 문자가 영어 소문자인 경우만 참을 리턴 
isupper(문자): 문자가 영어 대문자인 경우만 참을 리턴 
ispunct(문자): 문자가 기호문자인 경우에만 참을 리턴 
isspace(문자): 문자가 스페이스인 경우에만 참을 리턴 
isascii(int c): c가 ASCII이면 참값을 리턴 
iscntrl(int c): c가 control 문자이면 참값을 리턴 
isprint(int c): c가 인쇄 가능한 문자이면 참값을 리턴 
예제7) 문자 판단 함수 
#include <stdio.h> 
#include <ctype.h> 
int main() 
    char ch = 'A'; 
    if(isalnum(ch)) 
    {    printf("영문자 또는 숫자임\n"); } 
    else 
    { printf("영문자 또는 숫자 아님\n"); } 
 
 

    if(isalpha(ch)) 
    {    printf("영문자임\n"); } 
    else 
    { printf("영문자 아님\n"); } 
 
 

    if(isdigit(ch)) 
    {    printf("숫자임\n"); } 
    else 
    { printf("숫자 아님\n"); } 
 
 

    if(islower(ch)) 
    {    printf("소문자임\n"); } 
    else 
    { printf("소문자 아님\n"); } 
 
 

    if(isupper(ch)) 
    {    printf("대문자임\n"); } 
    else 
    { printf("대문자 아님\n"); } 
 
 

    if(ispunct(ch)) 
    {    printf("기호문자\n"); } 
    else 
    { printf("기호문자 아님\n"); } 
 
 

    if(isspace(ch)) 
    {    printf("스페이스임\n"); } 
    else 
    { printf("스페이스 아님\n"); } 
 
 

    if(isascii(ch)) 
    {    printf("ASCII 문자임\n"); } 
    else 
    { printf("ASCII 문자아님\n"); } 
 
 

    if(iscntrl(ch)) 
    {    printf("제어문임\n"); } 
    else 
    { printf("제어문자 아님\n"); } 
 
 

    if(isprint(ch)) 
    {    printf("프린트 가능\n"); } 
    else 
    { printf("프린트 불가능\n"); } 
return 0; 
}

 
 

 
 

2) 문자 변경 함수 
toascii(char c): 문자를 아스키 코드 값으로 변경 
tolower(char c): c를 소문자로 변환하는 함수 
toupper(char c): c를 대문자로 변환하는 함수 
 
 

예제8) 문자 변경 함수 
#include <stdio.h> 
#include <ctype.h> 
int main() 
    char ch = 'A'; 
    printf("ch의 ASCII 값 %d\n", toascii(ch)); 
    printf("ch를 소문자로 변경\n"); 
    ch = tolower(ch); 
    printf("ch = %c\n", ch); 
    printf("ch를 대문자로 변경\n"); 
    ch = toupper(ch); 
    printf("ch = %c\n", ch); 
return 0; 
}
Posted by cyj4369
,
문자열 함수(string.h) 
 
모든 시간 함수의 원형은 time.h 헤더 파일에 선언되어 있으므로 시간 관련 함수를 사용하려면 반드시 time.h를 인클루드 해야 합니다. 
 
 

char *strcpy( char *strDestination, const char *strSource ); 
Source의 문자열을 Destination에 복사 
char *strncpy( char *strDest, const char *strSource, size_t count ); 
Source의 문자열을 Destination에 n 만큼 복사 
 
 

예제9) strcpy 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str1[20] = "Good"; 
    char str2[20] = "Morning";
    char str3[20]; 
    strcpy(str3, str1); 
    printf("str3 = %s\n", str3); 
    strncpy(str3, str2, 4); 
    printf("str3 = %s\n", str3); 
return 0; 
 
 

}

 
 

char *strcat( char *strDestination, const char *strSource ); 
Source의 문자열을 Destination에 연결 
char *strncat( char *strDest, const char *strSource, size_t count ); 
Source의 문자열을 Destination에 n 만큼 연결 
 
char fruit[80] = "straw";
strcat(fruit, "berry"); 
 




예제10) strcat 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str1[20] = "Good"; 
    char str2[20] = "Morning";
    char str3[20] = "\0"; 
    strcat(str3, str1); 
    printf("str3 = %s\n", str3); 
    strncat(str3, str2,4); 
    printf("str3 = %s\n", str3); 
return 0; 
 
 

}

 
 

int strcmp(const char *string1, const char *string2 ); 
string1과 string2를 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별함 
int strncmp( const char *string1, const char *string2, size_t count ); 
string1과 string2를 count 만큼 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별함 
int stricmp( const char *string1, const char *string2 ); 
string1과 string2를 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별하지 않음 
int _strnicmp( const char *string1, const char *string2, size_t count ); 
string1과 string2를 count 만큼 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별하지 않음 
 
 

예제11) strcmp 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str1[20] = "Good"; 
    char str2[20] = "Morning"; 
    printf("%d\n", strcmp(str1, str2)); 
    strcpy(str2, "Good Morning"); 
    printf("%d\n", strncmp(str1, str2,4)); 
    strcpy(str2, "good"); 
    printf("%d\n", strcmp(str1, str2)); 
    printf("%d\n", stricmp(str1, str2)); 
    printf("%d\n", strnicmp(str1, str2,4)); 
return 0; 
}

 
 

char *strset( char *string, int c ); 
string 문자열을 c 문자로 채움 
char *strnset( char *string, int c, size_t count ); 
string 문자열 중 count에 해당하는 만큼 c 문자로 변경 
 
 

예제12) strset 
#include <string.h> 
#include <stdio.h> 
int main( ) 
char string[] = "Fill the string with something"; 
printf( "Before: %s\n", string ); 
strset( string, '*' ); 
printf( "After: %s\n", string ); 
strnset( string, '?', 4 ); 
printf( "After: %s\n", string ); 
return 0; 
 
 

}

 
 

strlwr( char *string ); 
string 문자열을 소 
예제13) strs 문자로 변경 
char * strupr( char *string ); 
string 문자열을 대문자로 변경 
size_t strlen( const char *string ); 
string 문자열의 글자 수 반환 
 
 

예제13) strlwr 
#include <string.h> 
#include <stdio.h> 
int main() 
char string[] = "Fill the string with something"; 
int location; 
printf("string의 소문자 %s\n", strlwr(string)); 
printf("string의 대문자 %s\n", strupr(string)); 
printf("string의 메모리 사이즈 %d\n", sizeof(string)); 
printf("string의 문자 수 %d\n", strlen(string)); 
return 0; 
 
 

}

 
 

char * strchr( const char *string, int c ); 
string에서 문자 c의 메모리 위치 반환 
char *strrchr( const char *string, int c ); 
string에서 문자 c의 메모리 위치 반환(뒤에서부터 검색) 
 
 

예제14) strchr를 이용해서 문자열에서 첫 번째 검색 위치를 찾아내는 프로그램 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str[256] = "My name is Park Moon Seok"; 
char *ptr; 
    char ch; 
    int result; 
    while(1) 
    { 
        printf("찾고자 하는 문자를 입력하세요=>"); 
        ch = getchar(); 
        fflush(stdin); 
        printf("1. 앞에서 2. 뒤에서=>"); 
        menu = getchar(); 
        ptr = strchr(str, ch); 
        result = ptr - str + 1; 
 
 

            if(ptr != NULL ) 
            { 
    printf( "Result: 첫번째 %c 발견위치 = 앞에서 %d 번째\n", ch, result ); 
            } 
            else 
            { 
             printf( "Result:%c는 없습니다\n", ch ); 
            } 
    return 0; 
}

strrchr은 뒤에서부터 검색하게 되는데 위치를 리턴 하므로 문자가 하나만 있는 경우는 같은 결과가 나올 것이고 o를 검색하면 다르게 나올 것 입니다. 
예제15) strchr를 이용해서 문자열에서 o의 개수를 알아내는 프로그램 
#include <stdio.h> 
#include <string.h> 
int main() 
char str[256] = "My name is Park Moon Seok"; 
char *ptr = str; 
unsigned int i,count=0; 
for (i=0;i<strlen(str);i++) 
     { 
ptr = strchr(ptr,'M'); 
if (ptr == NULL) 
         { 
break; 
count++; 
         ptr ++; 
printf("입력한 문자열에는 o가 %d개 있습니다.\n",count); 
}

 
 

char *strstr( const char *string, const char *strCharSet ); 
string에서 문자열 strCharSet의 메모리 위치 반환 
strcmp는 전체 일치하는 문자열은 검색할 수 있지만 부분 일치는 알아낼 수 없습니다. 
부분 일치를 찾아 낼 때 사용하는 함수 입니다. 
char *strpbrk( const char *string, const char *strCharSet ); 
string에서 문자열 strCharSet 중 첫 번째 나오는 메모리 위치 반환 
예제16) strstr, strpbrk를 이용해서 문자열에서 문자열을 검색하는 프로그램 
#include <stdio.h> 
#include <string.h> 
int main() 
char str[256] = "My name is Park Moon Seok"; 
char *ptr; 
unsigned int result; 
ptr = strstr(str,"name"); 
         result = ptr - str + 1; 
if(ptr != NULL ) 
            { 
        printf( "Result: name 발견위치 = 앞에서 %d 번째\n", result ); 
            } 
            else 
            { 
             printf( "Result: name은 없습니다\n"); 
            } 
         ptr = strpbrk(str,"xyz"); 
         result = ptr - str + 1; 
if(ptr != NULL ) 
            { 
        printf( "Result: xyz 중 하나 발견위치 = 앞에서 %d 번째\n", result ); 
            } 
            else 
            { 
             printf( "Result: xyz는 없습니다\n"); 
            } 
    return 0; 
}

char *strtok(char *strToken, const char *strDelimit); 
strToken을 strDelimit 단위로 분할해주는 함수 
 
 

예제17) strtok를 이용해서 공백을 기준으로 분할하는 예제 
#include <string.h> 
#include <stdio.h> 
char string[] = "My name is Park Moon Seok"; 
char *token; 
int main( ) 
token = strtok(string," "); 
while( token != NULL ) 
printf( "%s\n", token ); 
     token = strtok(NULL, " "); 
return 0; 
}
Posted by cyj4369
,
메모리 관리 함수(memory.h) 
 
C에서는 메모리를 관리할 수 있는 함수를 제공합니다. 
1)memset 
void *memset(void *dest, int c, size_t count); 
dest을 c로 count 만큼 채워주는 함수 
일반적으로 c자리에 0을 이용해서 메모리를 초기화하는데 이용 
 
 

2)memcpy 
void *memcpy(void *dest, const void *src, size_t count ); 
dest 을 src의 내용으로 count 만큼 복사해 줌 
 
 

3)memmove 
void *memmove(void *dest, const void *src, size_t count); 
dest 을 src의 내용으로 count 만큼 복사해 줌 
 
 

예제20) 
#include
<memory.h> 
#include
<string.h> 
#include
<stdio.h> 
int main() 
    char str1[7] = "aabbcc"; 
printf( "이전 문자열: %s\n", str1 ); 
memcpy( str1 + 2, str1, 4 ); 
printf( "새로운문자열: %s\n", str1 ); 
strcpy( str1, "aabbcc" ); 
printf( "이전 문자열: %s\n", str1 ); 
memmove( str1 + 2, str1, 4 ); 
printf( "새로운문자열: %s\n", str1 ); 
    return 0; 
}
Posted by cyj4369
,
난수 함수(stdlib.h) 
 
난수(Random Number)란 무작위로 만들어지는 알 수 없는 값을 말합니다. 
어떤 값을 가지게 될 지 예측할 수 없는 수라는 뜻인데 이런 난수가 필요한 이유는 말 그대로 예측을 허용하지 않기 위해서입니다. 
 
 

int rand(void); 
void srand(unsigned int seed); 
 
 

rand 함수는 0~RAND_MAX 범위의 수 중에서 무작위로 한 수를 생성해 냅니다. 
RAND_MAX는 컴파일러에 따라 다르지만 일반적으로 32767(0x7ffff)로 정의되어 있습니다. 그래서 rand 함수를 호출하면 0부터 32767중의 임의의 정수 하나가 리턴 됩니다. 
 
 

예제2) 5개의 숫자를 랜덤하게 추출해주는 예제 
#include <stdio.h> 
#include <stdlib.h> 
int main() 
    int i; 
    printf("rand()의 결과는 0부터 %d까지의 랜덤한 수\n", RAND_MAX); 
    for(i=0; i<5; i++) 
    { 
        printf("[%d]번째 수: %d\n", i+1, rand()); 
    } 
    return 0; 
}

위의 예제는 5개의 랜덤한 수를 추출하지만 계속 수행해 보면 항상 동일한 결과를 출력합니다. 
rand 함수는 일정한 난수 생성 규칙(seed)에 따라 난수를 생성하는데 난수 생성 규칙이 항상 같기 때문에 난수가 생성되는 순서도 항상 같게 됩니다. 
난수 생성 규칙에 변화를 줄 수 있는 함수가 srand라는 함수입니다. 
srand는 난수 발생기에 난수를 발생시키는 시작점(seed)를 제공하며 난수 발생기는 이 시작점을 기준으로 하여 난수를 발생시키게 됩니다. 
따라서 시작점을 바꾸면 생성되는 난수도 달라집니다. 
즉 srand 함수의 매개변수로 정수 값을 넣어주면 생성되는 숫자가 달라지게 됩니다. 
그러나 이렇게 하더라도 시작점이 동일하면 생성되는 난수에는 일정한 규칙이 존재할 수밖에 없습니다. 
완전한 난수를 만들기 위해서는 난수 생성기에게 전달되는 시작점 또한 예측 불가능한 난수여야 합니다. 
이러한 이유로 시간 값을 시작점으로 사용한다면 완전한 난수를 만들 수 있습니다. 
따라서 위의 예제에 숫자를 추출해 내기 전에 
srand((unsigned)time(NULL)); 문장을 삽입하면 완전한 난수가 추출될 것 입니다. 
 
 

또한 일정한 범위 안의 난수를 추출할 수 도 있습니다. 
가령 1부터 10까지의 난수 추출이라면 
rand() % 10 +1 이렇게 하면 됩니다. 
 
 

예제3) 1부터 100까지 짝수만 5개 추출하는 예제 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int main() 
    int i; 
    srand((unsigned)time(NULL)); 
    for(i=0; i<5; i++) 
    { 
        printf("[%d]번째 수: %d\n", i+1, (rand()%50+1)*2); 
    } 
    return 0; 
}
Posted by cyj4369
,
*HOSTENT*

 
HOSTENT 구조체는 윈도우즈 소켓 시스템에 할당됩니다. 애플리케이션에서는 이 구조체를 수정하거나 내용을 비워서는 안 됩니다. 
또한 각각의 쓰레드에 대하여 이구조체의 한개의 카피본 만이 할당되어야 합니다. 유효성은 다른 윈도우즈 소켓 함수가 호출될 때 까지만 보장되므로 애플리케이션은 이 정보가 필요하다면, 다른 윈도우즈 소켓 함수가 호출되기 전에 특정한 정보를 카피해야 합니다.
 gethostbyname, gethostbyaddr함수 사용시 hostent구조체가 반환됩니다.
 
 
 
struct hostent { 
        char FAR *              h_name; 
        char FAR * FAR *     h_aliases; 
        short                       h_addrtype; 
        short                       h_length; 
        char FAR * FAR *     h_addr_list; 
};
 
 
 
*Members*
 
h_name
호스트의 공식적인 이름입니다. 만약 DNS 나 그와 유사한 시스템이 사용되었을 때, 이 멤버는 FQDN(Fully Qualified Domain Name)을 가지게 됩니다.
 
h_aliases
호스트 이름과 관계되는 이름(앨리어스)으로, 널로 끝나는 스트링 배열 입니다.
 
h_addrtype
어드레스 타입을 지정하는데, 윈도우즈 소켓의 경우 항상 PF_INET 입니다.
 
h_length
각 어드레스의 길이를 지정하며, PF_INET 어드레스에 대해 항상 4 입니다.
 
h_addr_list
널 문자로 끝나는 호스트의 주소 리스트입니다. 주소는 네트웍 바이트 오더 입니다. 또한 이전 소프트웨어와 호환을 위해서 h_addr_list[0]을 의미하는 h_addr 매크로가 정의되어 있습니다.
 
 
 
*See Also*
 
overview, PROTOENT, SERVENT

Posted by cyj4369
,
*WSACleanup*
WSACleanup 함수는 WS2_32.DLL의 사용을 종료하는 함수입니다.
int WSACleanup (void);
 
*Remarks*
이 함수가 사용되기 전에 WSAStartup함수의 성공적이 수행이 있어야 합니다. 이 함수는 WSAStartup함수로 윈속을 초기화 하고 윈도즈 소켓을 다 사용하고 나서 사용한 소켓 리소스를 반환할 때 사용되는 함수이므로 반드시 윈도즈 소켓 사용후에 더 이상 소켓 자원이 필요 없을 때, 꼭 호출되어야 합니다. 
또한 이함수가 수행될 때, 블록킹 상태에 있는 처리나, 비동기 작업은 통지 메시지나 이벤트의 포스팅 작업이 없이 바로 취소됩니다. 결국 완벽한 작업을 끝마치지 못한 상태에서 중지되는 것이라 하겠죠. 이러한 경우 연산은 실패로 돌아가고, WSA_OPERATION_ABORTED라는 에러코드를 발생하게 됩니다.
WSACleanup함수가 호출되었을 때 개방된 소켓은 리셋되고 WSACleanup함수가 호출되기 전에 closesocket 함수에 의해 닫힌 소켓은 정상적으로 닫히게 됩니다. 이 때 소켓은 전송 큐에 걸려 있는 데이터를 여전히 가지게 됩니다. WSACleanup 함수가 호출되지 않을 경우 걸려있는 데이터는 그대로 전송되게 됩니다.
참고의 말씀을 드리자면, 이렇게 걸려있는 데이터(pending data)를 다 전송하도록 하려면, 접속을 종료하기 위해 shutdown 함수를 호출해야 합니다. 이렇게 하면 걸려있는 데이터를 모두다 전송 할 때까지 대기하게 되고, 그다음에 closesocket 그리고, WSACleanup 함수를 호출하게 된다면, 아주 이상적으로 소켓을 종료 할 수 있습니다.
블록킹 후크 상태에서 WSACleanup 함수를 호출하려면, 먼저 WSACancelBlockingCall 함수를 먼저 호출하고 나서 WSACleanup 함수를 호출해야만 한다는 점 주의하시구요. 음... 또 주의 해야 할점은 멀티 쓰레드 환경에서, WSACleanup 함수의 호출은 모든 쓰레드에 대해서 윈속 연산을 종료시킨 다는 것입니다.
 
*Return Values*
성공할 경우 0을 반환하고, 에러가 발생할 경우 SOCKET_ERROR 에러가 반환되고, WSAGetLastError 함수를 호출해서 특정한 에러코드를 얻어낼 수 있습니다.
 
*Error Codes*
WSANOTINITIALISED 이 함수를 사용하기 이전에 WSAStartup 함수를 성공적으로 호출해야 합니다.
WSAENETDOWN 네트웍 서브 시스템에서 에러가 났습니다.
WSAEINPROGRESS 블럭킹 윈속 v1.1이 진행상태에 있거나, 서비스 프로바이더가 아직 콜백함수를 진행하고 있습니다.
 
*QuickInfo*
Windows NT : 사용가능
Windows : 사용가능
Windows CE : 버젼 1.0 그리고 그이후의 버젼에서 사용가능
Header :
          Win16/32 : winsock.h
          Win32-II : winsock2.h
Import Library :
          Win16 : winsock.lib
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib

*See Also*
overview, closesocket, shutdown, WSAStartup

<출처>
http://blog.naver.com/a71045851?Redirect=Log&logNo=150002011123
Posted by cyj4369
,