본문 바로가기
Programming/1. boostcourse - 'CS50'

Ep 3-2. 문자열

by @sangseophwang 2021. 4. 7.

@Unsplash. string 을 검색했더니 이 사진이 나왔다.

get_string

 이번 시간에는 좀 더 다이나믹한 것을 해볼 예정이다. 우선 지난 번에 했던 방식처럼 스크래치와 C언어를 비교하는 예를 보자.

 

What's your name?

 스크래치의 ask 와 가장 비슷한 C 함수는 get_string 이다. string은 단어나 구절, 문장을 부르는 말이며 숫자와는 다른 종류의 데이터를 말한다. 괄호 사이에는 어떠한 입력을 넣을 수 있는데 사용자가 화면에서 보게 될 명령어를 넣을 수 있습니다. 그래서 위와 같이 작성하고 실행하면 $What's your name? 이라는 질문이 나오게 된다.

 이제 get_string을 통해 사용자에게 이름을 물어봤으니 그 답변을 활용해야 한다. 이 때 get_string 앞에 'string ---- = ' 을 붙이면 된다. 위 예시에는 answer 이라고 적혀있는데, 이 부분은 '변수' 이고 내 마음대로 이름을 붙여도 되지만 알아보기 쉽게 answer 이라고 적어놓은 것이다. 앞에 string 이 붙는 이유는 C가 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해야 알아듣기 때문이다. 그래서 변수 왼쪽에 저장하고자 하는 값의 종류가 문자열임을 알려줘야 하기에 string 을 쓰는 거다. 마지막으로 ''=' 은 우리가 평상시에 쓰는 '같다' 의 뜻이 아니라 '할당 연산자' 로써 오른쪽의 내용을 왼쪽으로 옮기는 화살표의 역할을 한다. 정리하자면,

 

"get_string("what's your name?\n"); 을 통해 답을 얻으면 그 답을 answer라는 변수에 저장한다."

 

hello, SEOP

 자 이제 질문을 완성했고, answer 라는 변수에 내 이름이 담겼다. 이제 컴퓨터가 답할 차례다. 그런데 만약 hello, answer 이라고 쓰면 내 이름이 아니라 문자 그대로 hello, answer 로 답을 할 것이다. 이 때 내 답이 담긴 answer이라는 인자를 받기 위해 %s 를 사용한다. 그리고 마지막으로 Terminal 로 가서 'make ----' 라고 치면 기존에 'clang -o hello hello.c' 와 동일하게 프로그램을 만들 수 있다.

 

"좋아하는 동물을 알려주세요"로 질문하여 동물 이름을 animal이라는 변수에 저장하고, 이를 "내가 좋아하는 동물은"으로 출력해주는 코드를 작성해보세요.

 위 코드에서 #include <cs50.h> 라는 처음 보는 라이브러리가 생긴 것을 알 수 있다. 이것은 이 강의를 위해 만들어진 라이브러리이며 string 이라는 함수를 알아듣게 하기 위해 추가한 것이다. 원래 'make hello' 를 하기 전 'clang -o hello hello.c -lcs50' 라는 것을 썼는데, -lcs50 은 cs50,h 라는 라이브러리를 추가해 프로그램을 만든다는 의미이다. 그럼 여기서 <stdio.h> 는 왜 적지 않을까 라는 의문이 생길 수 있는데, stdio.h 는 표준 라이브러리이며 기본적으로 link가 되어있기 때문에 따로 적지 않는 것이다.

 

 

점점 어려워지는 기분이 들지만, 정신 차리고 잘 이해해야지!

반응형

댓글