달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31








:
Posted by youjin.A
2015. 9. 4. 17:43

구조체의 정의 프로그래밍/C언어2015. 9. 4. 17:43

구조체를 사용함으로써 여러 변수를 하나로 묶어 새로운 자료형을 정의 할 수 있다.

 


-구조체 정의

struct     자료형_이름

{

   변수 선언1;

   변수 선언2;

   변수 선언3;

};


배열도 변수이기 때문에 구조체의 멤버가 될 수 있다.

 



-구조체 변수 선언

struct      자료형_이름    변수_이름;


또는 다음과 같이 구조체를 정의함과 동시에 구조체 변수를 선언 할 수 있다.


struct     자료형_이름

{

   변수 선언1;

   변수 선언2;

   변수 선언3;

}변수_이름1, 변수_이름2, 변수_이름3;




-구조체 변수의 초기화

구조체 변수의 초기화 방법은 배열의 초기화와 유사하다.

단순히 멤버의 순서대로 초기화할 대상을 나열하면 된다.

그래서 초기화 과정에서는 문자열 저장을 위해서 strcpy()함수를 호출 하지 않아도 된다.

 



-구조체 변수의 멤버에 접근

​구조체_변수_이름.멤버_이름




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <string.h>
 
struct person //구조체 정의
{
    char name[20];
    char phoneNumber[20];
    int age;
}man1, man2; //구조체 변수 선언
 
int main(void)
{
    //struct person man1, man2; //구조체 변수 선언
        
    /*구조체 변수의 초기화*/
    struct person man3 = {"홍길동""010-1234-8697", 84};     
    
    /*구조체 멤버에 접근*/
    strcpy(man1.name,"안유진");
    strcpy(man1.phoneNumber,"010-4085-8697");
    man1.age = 23;
        
    /*구조체의 scanf 사용*/
    printf("이름을 입력하세요: "); scanf("%s", man2.name);
    printf("전화 번호를 입력하세요: "); scanf("%s", man2.phoneNumber);
    printf("나이를 입력하세요: "); scanf("%d", &man2.age);
 
    /*구조체의 printf 사용*/
    printf("이름: %s \n", man1.name);
    printf("전화번호: %s \n", man1.phoneNumber);
    printf("나이: %d\n\n", man1.age);
 
    printf("이름: %s \n", man2.name);
    printf("전화번호: %s \n", man2.phoneNumber);
    printf("나이: %d\n\n", man2.age);
 
    printf("이름: %s \n", man3.name);
    printf("전화번호: %s \n", man3.phoneNumber);
    printf("나이: %d\n", man3.age);
    
    return 0;
}


:
Posted by youjin.A

컴파일 할 때, 특정 조건에 따라 소스코드의 일부를 삽입할 수 있는 지시자들이 있다.

이 지시자에서 조건을 만족하지 않아서 삽입되지 않은 코드는 오류가 있더라도 전체 프로그램은 컴파일 오류가 생기지 않는다.


1. #if... #endif : 매크로가 참이면

#if (매크로)

코드

#endif

매크로가 참이라면 코드가 소스에 삽입되고, 거짓이면 코드는 삭제된다.

매크로 부분에 연산자는 사용가능하나 변수는 사용할 수 없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#define ADD    
#define MIN    
 
int main(void)
{
    int num1, num2;
    //int add = 0, min = 1;
 
    printf("두 개의 정수 입력: ");
    scanf_s("%d %d"&num1, &num2);
 
 
 
#if ADD
    printf("%d + %d = %d\n", num1, num2, num1 + num2);
#endif // ADD
 
#if MIN
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
#endif // MIN
 
    return 0;
}
 








2. #ifdef... #endif : 매크로가 정의되어 있다면

#ifdef (매크로)

코드

#endif

매크로가 #define으로 정의가 되어 있다면 코드가 삽입된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#define ADD    0
#define MIN    1
 
int main(void)
{
    int num1, num2;
    //int add = 0, min = 1;
 
    printf("두 개의 정수 입력: ");
    scanf_s("%d %d"&num1, &num2);
 
 
 
#ifdef ADD
    printf("%d + %d = %d\n", num1, num2, num1 + num2);
#endif // ADD
 
#ifdef MIN
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
#endif // MIN
 
    while (1);
}
 
cs

3. #ifndef... #endif : 매크로가 정의되지 않았다면
#ifndef (매크로)
코드
#endif
위의 #ifdef... #endif와 비슷하지만 이 지시자는 매크로가 정의되지 않았다면 코드를 삽입한다.

4. #else의 삽입 : #if, #ifdef, #ifndef에 해당
#if (매크로)
코드1
#else
코드2
#endif
#if의 경우 매크로가 참이거나, #ifdef의 경우 매크로가 정의되어 있거나, #ifndef의 경우 매크로가 정의되어 있지 않으면 코드1을 삽입하고 아니면 코드2를 삽입한다.  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#define HIT_NUM 6
 
int main(void)
{
#if HIT_NUM == 5
    puts("1");
#else
    puts("2");
#endif
 
    while (1);
}
 
cs
위 코드를 실행하면 2가 출력된다.

5. #elif의 삽입 : #if에만 해당
#if (매크로1)
코드1
#elif (매크로2)
코드2
#endif

#else + if인 것으로 조건을 추가할 수 있다.

#if의 경우에만 사용할 수 있다.

매크로1이 참이면 코드1을 수행, 매크로1이 거짓이고 매크로2가 참이면 코드2를 수행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define HIT_NUM 6
 
int main(void)
{
#if HIT_NUM == 5
    puts("5");
#elif    HIT_NUM == 6
    puts("6");
#else
    puts("nope");
#endif
 
    while (1);
}
 
cs


:
Posted by youjin.A