Friday, March 23, 2007
C언어] scanf 함수로, 문자열/정수/실수 입력 받기; scanf Function Input
scanf 함수를 사용하여, 사용자로부터 문자(문자열)나 숫자를 입력 받는 예제 소스입니다.
입력받은 숫자를 숫자로 변환하지 않아도 자동으로 숫자가 됩니다.
키보드로부터 입력을 받는 방법은 이 외에 여러 가지가 있습니다.
소스 파일명: example.cpp
컴파일 및 실행 결과 화면:
문자열 입력은 이 방법이 더 좋습니다: ▶▶ C언어] gets, fgets 함수로, 키보드 문자(문자열) 입력 받기; String Input
입력받은 숫자를 숫자로 변환하지 않아도 자동으로 숫자가 됩니다.
키보드로부터 입력을 받는 방법은 이 외에 여러 가지가 있습니다.
소스 파일명: 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;
}
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>
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++)
scanf("%200s", s);
에 &가 빠졌습니다
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