혼자 공부하는 C언어 | 3주차

이번 과제는 조금 달라서 어떤 식으로 작성을 해야할지 고민이 많이 되었습니다. 사실 책 뒤에 혼공 용어 노트가 있다는 사실도 이번주에 처음 알았습니다 😅😅 덕분에 1장부터 6장까지 중요한 용어를 복습할 수 있어서 좋았습니다. 그리고 선택문과 반복문은 왜 항상 맨 처음 배우면서도 볼 때마다 새로운 내용이 있는 걸까요? 머리에 사진을 찍어둘 수 있었으면 좋겠습니다….


✅ 크리스마스 소개팅

무슨 이런….
📚 ‘크리스마스 때까지 애인이 생기지 않으면’ 친구가 ‘소개팅을 주선해 준다’고 했습니다. 소개팅을 주선해 주는 행위에 전제가 붙어있습니다. if문도 이와 비슷하게 전제인 조건식과 조건을 만족해야 수행되는 실행문으로 구성됩니다. 따라서 소개팅을 if문에 비유하면 ‘크리스마스 때까지 애인이 생기지 않으면’은 조건식이고 ‘소개팅을 주선해 준다’는 실행문이 됩니다. (151p)

우선 코드부터 갑니다

 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
#include <stdio.h>
#include <stdbool.h> // bool 타입을 선언하기 위해 사용
#include <string.h>  // 문자열 비교를 위해 사용

int main(void) {

	char input[20];
	printf("크리스마스 소개팅\n");
	printf("애인이 있나요? (예/아니오) : ");
	scanf("%s", input); // 문자열 입력 받을 시 '&' 빼는 것 중요함

	bool has_love = false;

        // 여기서부터 사용되는 if문의 실행문은 대부분 한 줄이라 중괄호를 없애도 될 것 같습니다.
        // 하지만 제 취향은 중괄호를 쓰는 것입니다.
        
	if (strcmp(input, "예") == 0) // 문자열 비교 함수
	{
		has_love = true;
	}
	else
	{
		has_love = false;
	}

	if (has_love)
	{
		printf("돌아가세요\n");
	}
	else
	{
		printf("소개팅 주선을 실행합니다\n");
	}


	return 0;

}

실행결과

cmd

문자열을 다루는 내용을 제대로 배우지 않아서 strcmp 함수를 사용하지 않고 ==를 사용해서 비교를 했었는데,
실행 결과는 동일하지만

runtime error

사진과 같은 런타임 에러가 발생했습니다.
그래서 G 친구에게 도움을 요청하니 자바에서 문자열을 비교할 때 equals를 사용하는 것과 마찬가지로
C언어에서는 strcmp라는 함수를 사용해서 문자열 값을 비교해야한다. 라는 답을 얻을 수 있었습니다.

✅ 헤더 파일

크리스마스 소개팅 선택문을 구현하다가 예전부터 궁금했었던 stdio.h의 정체를 알게 되었습니다.

Standard Input and Output Library

입출력을 사용하기 위해 포함하는 헤더 파일이고, 헤더 파일은

1
2
import java.util.ArrayList;
import java.util.List;

이렇게 자바에서 필요한 라이브러리를 import 해주는 것과 유사한 개념이라고 생각하면 됩니다.
그런데 조금 다른 점이 있습니다. 제가 사용하기 편한 IDE에 고여있어서 그런지는 몰라도 항상 어떤 타입이나 새로운 함수를 사용하면 자동으로 import를 작성해주는 경우가 많았는데, visual studio에서는 팝업창으로 이 함수가 어느 헤더파일에 있다까지 알려주긴 해도 어쨌든 해당 헤더 파일을 직접 작성해줘야 했습니다.

#include <stdbool.h>, #include <string.h>
이 헤더 파일을 필요할 때마다 직접 작성하는게 너무 번거롭지 않나? 라고 생각이 들 때쯤, 서칭하면서
C언어에서 헤더 파일은 동작하는 방식이 달라서 자동화하기 어려운 구조로 되어있다- 라는 사실을 알게 되었습니다.

구분C/C++ #includeJava 등 import
동작시점전처리(문자 치환)컴파일 시 심볼 경로 인식
자동화 용이성낮음높음
사용 방식선언/정의 직접 공유심볼만 인식

그래서 자주 사용하는 헤더파일을 잘 알고 있어야 합니다.
공식 문서와 친해지자…. 🔗 reference 🔗 msdn

💡 혼공 용어 노트는 챕터가 끝나고 혹은 복습겸 한번씩 훑어보면서
기억이 나지 않는 부분을 복기하기에 좋을 것 같아 모르는 부분은 체크해두고 있습니다.

note

✅ 코드 작성 방식

이번에 선택문과 반복문을 배우면서 새로운 내용들도 많이 알게 되었지만
코드를 작성하는 방식이 다양하다는 것이 가장 크게 와닿았습니다.

예를 들어,
같은 for 반복문을 작성하는 것에도 int를 먼저 선언해주는 방식이나

1
2
3
int i; // 이렇게 하면 반복문 바깥에서 i를 사용할 수 있어서 좋을 것 같습니다

for (i = 0; i < 3; i++)

중괄호를 다음 줄부터 시작하는 방식이라던가

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
if (a > 10)
{
    if (b >= 0)
    {
        b = 1;
    }
    else
    {
        b = -1;
    }
}

이 외에도 다양하지만 생각나는 것들은 이 정도가 있습니다. 최대한 다양하게 알고 있는 것이 중요하다고 생각해서 제 습관대로 학습하지 않고 최대한 책에 있는 그대로 타이핑 해보았습니다.
이번에 배운 내용들은 코딩 테스트를 준비하면서 아주 유용하게 활용할 수 있을 것 같습니다. 👍

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus