반응형

scanf() 함수를 사용하여 키보드에서 입력한 임의의 값을 받는 방법을 설명한다.

사용자 입력 받기

지금까지의 프로그램에서는 변수에 상수를 대입해 왔지만, 실제 프로그램에서는 이렇게 무의미한 행위는 하지 않는다. 실행시에 동적으로 변화하는 부정확한 값일 경우에 변수를 사용하는 의미가 있다. 항상 같은 값을 화면에 표시하길 원하지 않는다면, 직접 상수를 지정하면 된다는 것이다.

그럼 "실행시에 동적으로 변화하는 값"은 어떻게 받아야 하는 걸까? 하나는 디스크 파일에서 데이터를 받는 방법을 생각할 수 있다. 예를 들어, 텍스트 파일을 입력하여 그것을 화면에 표시한다면, 그것은 실행시에 동적으로 변화하는 값이라고 할 수 있다. 그러나 디스크 파일을 읽는 프로그램은 중급 수준의 작업이 되기 때문에 여기서는 설명할 수 없다. 이는 C 언어 기초부터 배우고, 후반에서 설명하도록 하겠다.

그럼, 더 쉽게 데이터를 입력하는 방법은 없는 것인가? 프로그램 실행 중에 키보드로부터 문자나 숫자를 입력할 수 있다면, 프로그램의 활용성도 크게 확대되고 향후 프로그램의 테스트도 보다 유연하게 할 수 있게 될 것이다. 키보드에서 값을 입력하려면 scanf() 함수를 사용한다. scanf() 함수는 printf() 함수의 입력 판에 지정한 변수에 대해 키보드에서 값을 입력한다.

scanf() 함수

int scanf("포멧" , &변수명);

scanf() 함수의 첫번째 인수에 서식 제어를 두번째 인수 이후에 입력된 값을 저장하는 변수를 지정한다. 서식 제어는 기본적으로 printf() 함수와 같은 것으로 생각될 수 있다. 숫자를 입력한다면 %d, 문자를 입력하는 경우 %c를 지정하는 식이다. 두번째 인수 이후는 서식 제어의 포멧 문자에 대한 변수를 지정하는 것인데, 단순하게 변수를 지정하는 것이 아니라 변수 이름 앞에 &를 지정한다.

왜 변수 앞에 &를 붙일 필요가 있는가 하면, 이는 함수에 변수의 주소를 알릴 필요가 있기 때문이다. 이것에 대해서는 포인터에 대한 자세한 내용을 알아야 할 필요가 있는데, 여기서는 키보드에서 입력하는 경우는 scanf() 함수 사용한다는 것을 설명하는 것이기에, 서식 제어의 포멧 문자에 대한 변수를 지정할 때는 변수명 앞에 &를 붙인다라는 정도만 기억하도록 하자. 이 &의 의미는 포인터를 학습할 때에 다시 설명하도록 하겠다.

scanf() 함수는 제대로 변환되어서 변수에 할당되는 포멧의 수를 반환한다.

코드1

#include <stdio.h>

int main() {
    int iVar = 0;

    printf("정수를 입력해 주세요. > ");
    scanf("%d" , &iVar);

    printf("입력한 수는 %d입니다.\n" , iVar);
    return 0;
}

코드1을 실행하면 값을 입력하도록 요구된다. 정수 값을 입력하면 iVar 변수에 입력한 값이 할당되고 화면에 숫자가 나타날 것이다. 올바른 값이 입력되지 않은 경우 변환할 수 없기 때문에 변수에 값이 할당되지 않는다.

실전 수준으로 문제를 생각하면, 사실 scanf() 함수가 사용되는 경우는 거의 없다. 이유는 오류 검사가 충분하지 않기 때문이다. 충분한 오류 검사를 할 필요가 있는 입력은(상용 프로그램은 충분한 오류 검사가 필요하기에, 결과적으로 본격적인 프로그램은 scanf()를 많이 사용하지 않는다) 변환 작업을 하지 않고 다른 표준 입력 함수를 사용하여 문자열로 입력된 정보를 받아 입력된 문자열을 조사해 적절한 값으로 변환하는 작업을 수행한다. 물론 이러한 작업은 복잡하다. 따라서 이 책에서는 입력 작업은 scanf() 함수를 사용하여 작업을 단순화한다.

반응형

+ Recent posts