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

 
Previous Post 파일 개수 세기 도스 명령어; File Counter DOS Command매스매티카] 허수 단위 i 입력 방법; Mathematica IMAGINARY UNIT I...매스매티카] 루트 근사값, 제곱근 구하기 함수 사용법; Mathematica Square ...Java 자바] 정수 숫자 입력 받기, 16진수 헥사 입력; Input Hex Int Nu...Java 자바] 실수 입력 받기, 키보드로, 에러 처리 루프; Input Float Num...동영상 비디오 파일 포맷 확장자 종류 설명, Movie File ExtensionC에서 printf 함수로, double, float, int, unsigned int 출...C언어] switch 문 (스위치) 사용법 예제; switch-case-default St...매스매티카 팁] 수식을, Shift-Enter키 대신 쉽게 입력하는 법; Mathemati...매스매티카 팁] 수식 계산 중지,취소 핫키, 멈추는 법; Mathematica Tip, S...

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

Friday, March 23, 2007
스폰서 링크

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

2 Comments:
At 11:38 PM, Blogger 유성진 said...

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

 
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. (배열 이름 자체가 포인터이므로 & 를 안 쓴다)"고 되어 있습니다.

 

Post a Comment

<< Home RSS 2.0 feed

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