728x90

새로운 예제 프로그램

우리는 컴퓨터에 숫자, 문자 혹은 단어나 문장을 넣어주고, 컴퓨터가 그 데이터를 이용해서 어떤 일을 해주기를 기대합니다. 이처럼 컴퓨터는 작업할 때 데이터를 가지고 작업합니다. 예를 들면, 지불할 이자를 계산한다거나, 리스트를 정렬해서 보여주는 등의 일을 할 수 있습니다. 이번 장에서는 읽어온 데이터를 조작하는 방법에 대해서 배울 것입니다.

이장의 목표는 C에서 사용되는 기본 데이터형 정수형과 부동소수점형의 차이에 대해서 알아본 뒤, 그 데이터들이 무엇을 의미하는지, 어떻게 선언하는지 그리고 언제 어떻게 사용하는지를 배우는 것입니다. 또한, 상수와 변수에 차이에 대해서도 설명할 것입니다.


이제 다시, 새로운 예제 프로그램을 만나볼 것입니다. 지금까지와 마찬가지로, 몇 가지 낯선 것들이 보이겠지만 금방 익숙해질 것입니다. 이 예제 프로그램의 대략적인 의도를 파악하기 위해서, 예제 3.1의 소스 코드를 컴파일한 뒤 실행시켜보세요. 시간 절약을 하고 싶다면 주석을 제외해도 괜찮습니다.

예제 3.1 - cmtoin.c

/* cmtoin.c -- 센티미터(cm)를 인치(in)로 변환하는 프로그램 */
#include <stdio.h>

int main(void) {
    float cm;    // 센티미터
    float in;    // 인치

    printf("센티미터를 인치로 변환하면 몇이 나올까요? \n");
    printf("센티미터 단위로 수를 입력해주세요 : ");

    // 사용자로부터 입력을 받는다.
    scanf("%f", &cm);

    // 입력받은 값에 (1 / 2.54)를 곱해준다.
    in = cm * (1 / 2.54);

    printf("인치로 변환한 값은 %.2f입니다. \n", in);

    return 0;
}


에러와 경고의 차이

이 프로그램을 정확하게 타이핑하지 않으면 신택스 에러를 만날 수 있습니다. 간혹, 정확하게 타이핑한 경우에도 "Warning-conversion from 'double' to 'float', possible loss of data"와 같은 경고 메세지를 받을 수 있는데, 에러 메시지는 프로그래머가 무언가 실수를 했기 때문에 컴파일을 중단하겠다는 뜻이고, 경고 메시지는 실행 결과가 프로그래머가 의도한 값이 아닐 수 있다는 뜻이며, 컴파일을 중단시키지 않습니다.

이 프로그램에서 "수를 입력하라"는 것은 값을 입력하고 [Enter] 키를 누르라는 것을 의미합니다. (수를 입력한 뒤 마냥 기다리고 있으면 안 됩니다.) [Enter] 키를 누르는 것은 타이핑이 끝났음을 컴퓨터에 알려주는 것입니다. 이 프로그램은 abcd와 같은 글자들이 아닌 1234와 같은 하나의 수가 입력되기를 기다리고 있습니다. 숫자를 입력하지 않고 문자를 입력하면 문제가 발생하는데, 이 문제를 해결하기 위해서는 if 문이 필요하니 여기서는 하나의 수만 입력해주세요.

센티미터를 인치로 변환하면 몇이 나올까요?
센티미터 단위로 수를 입력해주세요 : 100
인치로 변환된 값은 39.37입니다.


프로그램 수정하기

'[C 언어 기초] 10. 간단한 C 언어 예제'에서 설명한 것과 같이 다음 라인을 프로그램에 추가했는데도 프로그램의 실행 결과 창이 화면에 잠깐 나왔다가 사라졌나요?

getchar();

이 예제의 경우에는 getchar() 함수를 두 번 호출해야 합니다.

getchar();
getchar();

getchar() 함수는 문자 하나를 입력받기 때문에 프로그램은 사용자가 입력할 때까지 기다립니다. 이 예제의 경우 100을 타이핑하고, 개행 문자를 전송하는 [Enter] 키를 눌렀습니다. 이 경우 scanf() 함수는 수를 읽고 첫 번째 getchar() 함수는 개행 문자를 읽어 들이기 때문에 getchar()을 한 번 더 적어줌으로써 프로그램이 입력을 기다리게 합니다.


이 프로그램에서 새롭게 등장한 것

  • 새로운 종류의 변수를 선언합니다. 이전 예제에서는 정수형(int) 변수만을 사용했지만, 이 프로그램은 부동소수점형(float) 변수를 초기화하면서 더 넓은 범위의 데이터를 처리할 수 있게 되었습니다. flaot형 변수에는 소수점이 있는 수를 저장할 수 있습니다.
  • 새로운 종류의 변수를 출력하기 위해 printf() 코드 안에 부동소수점 수를 맡아 처리하는 %f 지정사를 넣어주었습니다. %f.2라는 변경자를 사용해서 소수점 아래 둘째 자리까지 출력하도록 조정합니다.
  • scanf() 함수는 키보드 입력 기능을 제공합니다. %fscanf() 함수에게 부동소수점 수를 하나 입력받으라고 지시합니다. &cmscanf() 함수로 입력받은 값을 cm이라는 변수에 대입하라고 지시합니다. scnaf() 함수는 cm이라는 변수가 어디에 있는지를 받아오기 위해서 & 기호를 사용합니다. & 기호에 대해서는 다음에 더 자세히 설명할 테니 지금은 이것이 여기에 필요하다는 것만 기억합시다.
  • 가장 눈에 띄는 특징은 이 프로그램이 대화형 프로그램이라는 것입니다. 컴퓨터는 사용자에게 정보를 입력하라고 요구하고, 사용자가 하나의 수를 입력하면 그 수를 사용합니다. 대화형 프로그램은 비대화형 프로그램보다 훨씬 유용하며, 프로그램의 융통성을 높여줍니다. 예를 들면, 이 예제 프로그램은 100cm뿐만 아니라 다른 적당한 값도 변환할 수 있습니다. 즉, 다른 값을 반환하기 위해 프로그램을 새로 작성할 필요가 없다는 것입니다. scnaf()printf() 함수가 이와 같은 상호작용을 가능하게 만들어줍니다. scanf() 함수는 키보드로부터 데이터를 읽어 그 데이터를 프로그램에 전달하고, printf() 함수는 프로그램으로부터 데이터를 읽어 그 데이터를 화면에 표시합니다. 이 두 함수를 결합해서 사용하면, 컴퓨터와 사용자의 쌍방향 소통이 가능해지고, 컴퓨터를 사용하는 재미를 느낄 수 있습니다.
이장에서는 위에 나열한 새로운 특징 중 다양한 데이터형의 변수와 상수에 대해 설명할 것입니다. 나머지 특징에 대해서는 나중에 설명하도록 하겠습니다.


728x90
728x90