null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
scanf — 입력 함수
#c
#c-lang
#beginner
#io
#scanf
@devpc
|
2026-03-29 05:33:43
|
GET /api/v1/nodes/26?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# scanf — 입력 함수 ## 기본 사용법 `scanf`는 사용자로부터 키보드 입력을 받는 표준 함수입니다. ```c #include <stdio.h> int main() { int age; printf("나이를 입력하세요: "); scanf("%d", &age); // & : 변수의 주소를 전달 printf("입력한 나이: %d\n", age); return 0; } ``` > ⚠️ `scanf`에는 변수 앞에 **반드시 `&`(주소 연산자)** 를 붙여야 합니다. --- ## 서식 지정자 `printf`와 동일한 서식 지정자를 사용합니다. ```c int i; double d; char c; scanf("%d", &i); // 정수 입력 scanf("%lf", &d); // double 입력 (반드시 %lf 사용) scanf("%c", &c); // 문자 입력 ``` > ⚠️ `double` 입력 시 `printf`는 `%f`를 써도 되지만, `scanf`에서는 반드시 **`%lf`** 를 사용해야 합니다. --- ## 여러 값 동시 입력 ```c int x, y; scanf("%d %d", &x, &y); // 공백 또는 엔터로 구분하여 두 값 입력 printf("x=%d, y=%d\n", x, y); ``` 입력 예시: ``` 10 20 ``` 또는 ``` 10 20 ``` --- ## 버퍼 문제 `scanf`는 **입력 버퍼**에 남은 데이터(특히 `\n`)가 다음 입력에 영향을 줍니다. ### 문제 발생 예시 ```c int num; char ch; scanf("%d", &num); // 숫자 입력 후 버퍼에 '\n' 남음 scanf("%c", &ch); // '\n'이 자동으로 ch에 들어가는 문제 발생 ``` ### 해결 방법: 버퍼 비우기 ```c scanf("%d", &num); while (getchar() != '\n'); // 버퍼의 \n 제거 scanf("%c", &ch); // 이제 정상 입력 ``` 또는 서식 지정자 앞에 공백 추가: ```c scanf(" %c", &ch); // ' '가 공백/줄바꿈 문자를 건너뜀 ``` --- ## fgets — 문자열 입력 (권장 대안) `scanf`로 문자열을 입력받으면 **공백에서 입력이 끊기고 버퍼 오버플로우 위험**이 있습니다. 문자열 입력에는 `fgets`를 사용하는 것이 더 안전합니다. ```c char name[50]; // ❌ scanf로 문자열 입력 — 공백에서 끊김 scanf("%s", name); // "Hello World" 입력 시 "Hello"만 저장 // ✅ fgets 사용 — 공백 포함한 한 줄 전체 입력 fgets(name, sizeof(name), stdin); ``` ### fgets 사용 시 주의 `fgets`는 줄바꿈 `\n`까지 저장합니다. 제거하려면: ```c #include <string.h> char name[50]; fgets(name, sizeof(name), stdin); // 마지막 '\n' 제거 name[strcspn(name, "\n")] = '\0'; printf("입력: [%s]\n", name); ``` --- ## scanf vs fgets 비교 | 항목 | `scanf("%s")` | `fgets` | |------|--------------|---------| | 공백 처리 | 공백에서 입력 끊김 | 공백 포함 입력 가능 | | 버퍼 크기 제한 | 기본적으로 없음 (위험) | 크기 지정 가능 (안전) | | 권장 용도 | 숫자, 단일 단어 | 문자열, 한 줄 입력 | --- ## 예제: 사용자 정보 입력 ```c #include <stdio.h> #include <string.h> int main() { char name[50]; int age; double height; printf("이름: "); fgets(name, sizeof(name), stdin); name[strcspn(name, "\n")] = '\0'; // 줄바꿈 제거 printf("나이: "); scanf("%d", &age); printf("키(cm): "); scanf("%lf", &height); printf("\n--- 입력 결과 ---\n"); printf("이름: %s\n", name); printf("나이: %d세\n", age); printf("키: %.1fcm\n", height); return 0; } ``` ---
// COMMENTS
ON THIS PAGE