[C] scanf 정리 및 여러가지 예제

C 언어 scanf 함수 기본 사용법과 예제 코드 제공! 빠르게 익히고 활용해보세요.

프로그램 실행 시 사용자와의 상호 작용이 필요 한 경우가 많습니다. 사용자로부터 명령을 받거나 필요한 정보를 입력받아야 하는데, 이를 위해 scanf(스캔에프)와 같은 함수가 쓰입니다.

scanf 함수: 사용자 입력을 수용하는 핵심 함수

scanf는 사용자로부터 정보를 입력받는 핵심 함수입니다. printf의 반대 역할을 수행하며, 동일한 서식을 사용합니다. 예를 들어, 정수를 입력받고 싶다면 %d 서식을 사용하고, 문자열을 입력받고 싶다면 %s 서식을 활용합니다. 단, 실수 서식 %f는 float, double에 모두 적용됩니다. 그러나 scanf에서는 float와만 호환됩니다. 따라서 double 값을 입력받으려면 %lf 서식을 활용합니다.

scanf의 기본 형식과 사용 방법

scanf를 호출하면 화면에 커서가 나타나며 입력을 요구합니다. 사용자는 키보드를 통해 프로그램이 요구하는 정보를 입력하고 Enter키를 누르면 됩니다. 기본 형식은 다음과 같습니다.

#include <stdio.h>
int scanf("서식문자열", &변수 [,&변수, ...]);

반환 값 int
scanf 함수가 성공하면 읽어온 값의 개수를 반환하고
실패한다면 -1 (EOF)를 반환합니다.

scanf 는 입력받은 문자열을 해당 서식에 맞는 패턴으로 쪼개고 분할하여 변수에 할당하게 됩니다.

scanf의 변수 지정과 & 연산자 활용

scanf로 값을 입력받을 때 변수명 앞에 & 연산자를 붙여야 합니다. 이는 변수의 번지를 전달하여 scanf가 해당 변수의 값을 변경할 수 있게 합니다.

정수형 변수 a에 값을 입력받을 때는 scanf(“%d”, &a)와 같이 호출합니다. 실수형 변수 b의 경우는 scanf(“%f”, &b)로 입력받습니다.
문자열의 경우는 이미 변수가 배열포인터이므로 & 를 붙이지 않습니다.
`char strarray[100]; scanf(“%s”, strarray);’

scanf 여러가지 서식

자세한 서식은 이전작성했던 문서 링크로 보여드립니다.

scanf 기본 입력 예제

정수 입력 받기

int num;
printf("정수를 입력하세요: ");
scanf("%d", &num);

실수 입력 받기

float f_num;
printf("실수를 입력하세요: ");
scanf("%f", &f_num);

문자 입력 받기

char ch;
printf("문자를 입력하세요: ");
scanf(" %c", &ch);

문자열 입력 받기 (공백 없는 경우)

char str[50];
printf("문자열을 입력하세요: ");
scanf("%s", str);

scanf 좀더 복잡한 입력 예제

문자열 입력 받기 (공백 포함하는 경우)

char sentence[100];
printf("문장을 입력하세요: ");
scanf(" %[^\n]s", sentence);

자리수 고정하여 문자열 입력 받기

  • 만약 버퍼 고정이며 버퍼가 넘치는 오류를 사전에 방지 할 수 있는 기술 입니다.
    char sentence[11];
    printf("문자열을 입력하세요: ");
    scanf("%10s", sentence);
    printf("%s", sentence);

“%10s” 가 중요합니다. 10글자만 받겠다는 의미입니다.
입력창에 “harostudio.co.kr” 을 입력하면 10글자인 harostudio 만 취합니다.
출력은 다음과 같습니다.

문자열을 입력하세요: harostudio.co.kr
harostudio
  • 숫자형식도 마찬가지 입니다.
    int i;
    printf("문장을 입력하세요: ");
    scanf("%2d", &i);
    printf("입력된 숫자는 %d 입니다. ", i);

“%2d” 입니다. 아무리 긴 숫자가 입력되어도 앞의 2문자만 취하여 숫자로 인식합니다.
출력은 다음과 같습니다.

문장을 입력하세요: 1234
입력된 숫자는 12 입니다.

패턴화된 문자열중 특정 서식만 입력

다음은 scanf 에 printf 처럼 서식이 아닌 값이 입력되어 있습니다.

    int i;
    float f;

    printf("패턴 문자열을 입력하세요: ");
    scanf("int:%d float:%f", &i, &f);
    printf("%d, %f", i, f);

scanf 안에 서식이 아닌 경우 입력된 문자열이 정확히 일치하는 패턴이어야 합니다.
위 예제에 대해 입력을 다음처럼 해 보겠습니다. “int:12 float:3.5”
출력은 다음과 같습니다.

패턴 문자열을 입력하세요: int:12 float:3.5
12, 3.500000

패턴화된 문자열중 특정 서식 무시

만약 여러 입력문중 특정한 위치의 입력문만 받고 나머지는 무시하고 싶으시다면 “‘*” 와 사용 하면 됩니다.

    int i, x;
    printf("문장을 입력하세요: ");
    scanf("%*d %d %*d %d", &i, &x);
    printf("입력된 숫자는 %d,%d 입니다. ", i,x);

scanf 안에 서식이 “%*d” 가 보입니다. 생소 하실 수 있는데 변수에 취하지 않겠다는 의미입니다.
위 문장은 4개의 숫자를 입력받지만 두번째와 네번째 숫자만 변수에 취하는 의미입니다.

문장을 입력하세요: 1 2 3 4
입력된 숫자는 2,4 입니다.

입력패턴 에러 핸들링

다음은 scanf 의 반환 값으로 잘 입력되었는지 조사하는 코드입니다.

    int i, x;
    printf("문장을 입력하세요: ");
    int inputcount= scanf("input %d %x", &i, &x);
    if(inputcount == 2)
        printf("입력된 숫자는 %d,%d 입니다. ", i,x);
    else
        printf("제대로 입력되지 않았습니다.");

scanf 안의 패턴에 잘 맞게 입력되면 2개의 변수를 취하므로 반환값은 2이고 출력은 10진수로 잘 출력이 됩니다.
다음처럼 출력됩니다.

문장을 입력하세요: input 12 1f
입력된 숫자는 2,12 입니다.

scanf 안의 패턴에 맞지 않는 입력이 되었을경우 출력은 “제대로 입력되지 않았습니다.” 가 출력될 것입니다.

문장을 입력하세요: 1 ab
제대로 입력되지 않았습니다.

이렇게 다양한 서식을 사용하여 scanf 함수를 통해 사용자로부터 원하는 종류의 입력을 받을 수 있습니다.

결론

scanf 함수는 C언어에서 사용자로부터 입력을 받는 중요한 함수입니다. 올바른 활용과 주의를 기울여 사용한다면 효과적으로 프로그램을 개발할 수 있습니다.

Leave a Comment