mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Friday, March 23, 2007

C언어] scanf 함수로, 문자열/정수/실수 입력 받기; scanf Function Input


scanf 함수를 사용하여, 사용자로부터 문자(문자열)나 숫자를 입력 받는 예제 소스입니다.

입력받은 숫자를 숫자로 변환하지 않아도 자동으로 숫자가 됩니다.

키보드로부터 입력을 받는 방법은 이 외에 여러 가지가 있습니다.

소스 파일명: example.cpp
#include <stdio.h>

int main(void) {

  // 200바이트의 문자열이 저장되는 배열
  // 배열의 끝을 알리는 NULL 문자 1개의 공간이 필요하기에 200 + 1 = 201
  char s[201];

  int i;
  double d;




/* 문자열 입력받기 */
  printf("\n\n아무 문자열이나 200바이트까지 입력: ");
  // "%s" 이렇게 문자열 길이를 지정 않으면 보안에 취약하므로 "%200s" 이렇게 길이 지정.
  // 또는 안전한 버전인 scanf_s() 를 대신 사용하면 됨.
  scanf("%200s", s);
  fflush(stdin);  // 입력 버퍼 청소

  printf("OK: %s\n", s);



/* 정수 입력 */
  printf("아무 정수 입력: ");
  // i 가 아닌, &i 이렇게,
  // 변수의 포인터를 파라미터로 입력해야 합니다.
  scanf("%d", &i);
  fflush(stdin);

  printf("OK: %d\n", i);




/* 실수 입력 */
  printf("아무 실수나 입력: ");
  scanf("%lf", &d); // "%f"가 아닌 "%lf"라고 해야 함
  fflush(stdin);

  printf("OK: %f\n", d);


  return 0;
}


컴파일 및 실행 결과 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp


아무 문자열이나 200바이트까지 입력: HSHSHSHSFHFHFHF
OK: HSHSHSHSFHFHFHF
아무 정수 입력: 1212121
OK: 1212121
아무 실수나 입력: 1514.545
OK: 1514.545000

D:\Z>



문자열 입력은 이 방법이 더 좋습니다: ▶▶ C언어] gets, fgets 함수로, 키보드 문자(문자열) 입력 받기; String Input




tag: cpp
C언어 | C/C++ (Visual C++)

2 Comments:
At April 11, 2016 at 11:38 PM, Blogger 1 said...

scanf("%200s", s);
에 &가 빠졌습니다

 
At April 12, 2016 at 11:57 AM, Blogger mwultong said...

1번: scanf("%200s", s);
2번: scanf("%200s", &s);

둘 다 동일한 결과가 나옵니다. 하지만 문자열을 입력받을 때는 &를 안 붙이는 1번이 정석이라고 생각됩니다.

MSDN에는 안 붙이는 것으로 나옵니다.

C언어 창시자인 Dennis Ritchie 가 집필한 "ANSI C Programming Language - by Kernighan and Ritchie, 2nd Edition (1978)"이라는 책에서도 안 붙입니다.

그 책에 보면 "No & is used with monthname, since an array name is a pointer. (배열 이름 자체가 포인터이므로 & 를 안 쓴다)"고 되어 있습니다.

 

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top