본문 바로가기

Programming/C/C++

8번째, scanf() 함수 주의사항.

안녕하세요 두다스입니다.

이번에는 scanf() 함수 사용시 주의사항에 대해 알아보겠습니다.


1. scanf() 함수에 사용되는 번지 연산자(&).

   scanf() 함수의 인수에는 반드시 다음과 같이 번지연산자(&)를 사용해야 합니다.

    ex) int ch;

         scanf("%d", &ch);

   다만, Hello와 같은 연속된 문자를 입력하고 싶을 땐

   ex) int ch[1000];

        scanf("%s", ch);

   위와 같이 해주시면 됩니다. 그 이유는 연속된 문자를 입력할 때는 변수선언 할 때 저장공간을 ch[1000]; 처럼

   변수이름 옆에 [바이트수]를 써주기 때문에 scanf()함수 인자에 번지연산자(&)를 또 써줄 필요는 없습니다.

   써줘도 별 문제는 없지만, 불필요하게 반복되는건 좀 그렇죠 .


2. scanf() 함수에 문자열 사용. // scanf()함수 내에 문자열을 사용할 경우엔 입력할때에도 문자열까지 같이 입력해야 정상적으로 입력값이 출력됩니다.

   scanf() 함수는 서식문자와 공백문자(' ', '\t, '\n') 외에 다른문자를 사용할 수 없습니다.

   ex) int ch;

        scanf("값을 입력하세요: %d", &ch);

   와 같이 사용하면 컴파일시에는 문제가 없지만, 실행시켜서 입력하면 이상한 값이 나오게 됩니다.

   따라서, 저렇게 사용하지 말고 다음과 같이 사용해야 됩니다.

   ex) int ch;

        printf("값을 입력하세요: ");

        scanf("%d", &ch);


3. scanf() 함수에서 콤마사용. // 2번과 마찬가지로 콤마도 입력할시에 똑같이 입력해주시면 정상적으로 입력값이 출력됩니다.

   scanf() 함수에서 콤마는 사용 할 수 없습니다.

   ex) int i, j;

        scanf("%d, %d", &i, &j);

   위와 같이 콤마를 사용했을경우엔 i는 정확한 값이 입력되지만, j는 값이 입력되지 않습니다.

   그 이유는 2번과도 연관이 있는데 콤마 등 사용할 수 없는 문자를 만나면 scanf() 함수는 에러가 발생되고 리턴하기 때문입니다.

p.s. 이 글은 안랩 V스쿨 카페(http://cafe.naver.com/vgeneration)와 블로그(http://dudas.tistory.com)에만 게시합니다.