computer-science-c-post2

boost course의 강의 내용으로 공부를 진행하였습니다.

문자열

문자열을 다루기 위해서는 문자열 형식을 가진 변수가 필요합니다. 사용자로부터 문자열을 입력받고 이를 다른 문자열과 합쳐서 출력하는 프로그램을 C로 작성해보겠습니다.

학습 목표

C로 문자열 형식을 가진 변수를 선언하고 출력하는 프로그램을 만들 수 있습니다.

핵심 단어

  • 형식지정자
  • string
  • make

번 강의에서는 간단하게 Hello World를 출력해보았습니다.

이번 시간에는 좀 더 다이나믹한 것을 해보도록 하죠

스크래치 강의에서 사용자의 이름을 입력으로 받고

그리고 그 사람의 이름을 불러서 인사를 했습니다.

스크래치 블록은 아래와 같았습니다.

1

그럼 이것을 C로 해보면 어떻게 될까요?

CS50 Sandbox에서는 스크래치의 ask함수와 가장 비슷한 것은 get_string 함수입니다.

String은 단어나 구절, 문장을 부르는 말입니다. (숫자와는 다른 종류의 데이터 입니다.)

2

사용자의 이름을 받아서 저장할 변수를 스크래치와 같이 answer이라고 정해보겠습니다.

이때 변수는 xyz, name 등과 같이 여러분 마음대로 정하셔도 무관합니다.

하지만 여기서 유의해할 점은 C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 합니다.

그래서 우리는 저장하고자 하는 값의 종류가 문자열(string)이라는 것을 알려줘야 합니다. 이때 string을 형식지정자라고 합니다.

왜냐하면 너무나 당연하게 이름은 숫자가 아닌 문자이기 때문에 컴퓨터에게 “answer에 들어갈 것들은 문자야!”라고 말해주는 것이죠

string 이외에도 여러가지 종류가 있지만 그 것은 다음에 알아보도록 하겠습니다.

우리가 일반적으로 사용하는 =은 같다 입니다.

하지만 프로그래밍 언어에서는 오른쪽에서 왼쪽으로 가는 화살표와 비슷하다고 생각해주시면 좋습니다.

쉽게 말하자면 오른쪽에 있는 것을 왼쪽에 지정한다는 것이죠. 이를 할당 연산자라고 합니다.

get_string 함수가 사용자의 이름을 반환하면 그 이름을 anwser이라는 변수에 저장하는 것입니다.

오른쪽에서 왼쪽으로 말이죠

이제 컴퓨터의 메모리 어딘가에 사용자의 이름이 저장되어 있는 것입니다.

3

그럼 이 것을 printf 함수로 출력을 해보도록 하겠습니다.

이때 유의할 점은 printf(“hello, answer”);이 아니라는 점입니다.

이 코드를 실행한다면 answer이 출력이 되어 hello, answer이 그대로 결과로 나옵니다.

우리는 answer이라는 변수에 들어있는 이름을 출력을 해야하기 때문에 %를 사용해 줍니다.

이 때도 어떤 종류의 인자를 받는지 말해줘야 합니다.

우리는 이름이라는 문자열을 받기때문에 string에서의 s를 %뒤에 붙여서 인자를 받아줍니다.

그래서 최종적으로는 printf(“hello, %s\n”, answer);이 되는 것입니다.

가장 위에 포함된 cs50.h 파일 안에 string이라는 문자열 형식과 get_string 이라는 함수에 대한 코드가 포함되어 있습니다. 이 파일을 포함해야만 전체 코드를 컴파일 하고 실행할 수 있습니다.

터미널창에 아래 명령어를 입력하여 컴파일을 할 수 있습니다.

$ clang -o string string.c -lcs50

여기서 -o string 은 string.c 를 string.out 이라는 머신코드로 저장하도록 하는 명령어입니다.

-lcs50은 “link”라는 의미를 지닌 -l 이라는 인자에 우리가 추가로 포함한 “cs50” 파일을 합친 것입니다. 이를 통해 컴파일시 cs50 파일을 연결하도록 알려줄 수 있습니다.

다소 복잡한 이런 과정 대신에, 아래 make 명령어를 통해 간단하게 컴파일을 수행할 수도 있습니다.

$make string

이와 같이 작성한 코드를 컴파일 하고 실행하면, 사용자에게 입력값을 받고 문장 내에 포함하여 출력하는 프로그램이 됩니다.