C - 사용자 입력: 초보자 가이드

안녕하세요, 미래의 프로그래머 여러분! 오늘은 C 프로그래밍의 흥미로운 세계에서 사용자 입력에 대해 배우겠습니다. 친절한 이웃의 컴퓨터 교사로서, 이 여정을 단계별로 안내해드리겠습니다. 그럼 커피 한 잔을 (또는 당신의 좋아하는 음료를) 마시면서 시작해보세요!

C - User Input

왜 C에서 사용자 입력이 필요한가요?

가정에서 계산기 프로그램을 만들고 있다고 상상해보세요. 오직 2와 2를 더하는 기능만 있는 계산기는 거의 무용지물이죠? 이때 사용자 입력이 유용해집니다! 사용자 입력을 통해 우리의 프로그램을 동적이고 상호작용적인 만들 수 있습니다. 항상 같은 일을 하는 대신, 프로그램은 다른 입력에 반응하여 다른 결과를 생성할 수 있습니다.

마법의 지팡이: scanf() 함수

C에서 사용자 입력을 캡처하는 마법의 지팡이는 scanf() 함수입니다. 이 함수는 사용자가 프로그램에 입력한 정보를 캡처하는"net"과도 같습니다. 다음으로 설명해보겠습니다:

#include <stdio.h>

int main() {
int number;
printf("숫자를 입력하세요: ");
scanf("%d", &number);
printf("입력하신 숫자: %d\n", number);
return 0;
}

이 예제에서:

  1. int 타입의 변수 number를 선언합니다.
  2. 사용자에게 숫자를 입력하도록 요청합니다.
  3. scanf()를 사용하여 입력을 캡처하고 number에 저장합니다.
  4. 마지막으로 사용자에게 숫자를 다시 출력합니다.

scanf()%d는 "정수를 기대합니다!"라고 말하는 것입니다. number 앞의 &는 "입력을 이 메모리 주소에 저장하세요"라는 의미입니다.

입력 유형: 탐구해보자!

정수 입력

이미 정수 입력 방법을 보았습니다. 보다 복잡한 예제를 시도해보겠습니다:

#include <stdio.h>

int main() {
int age, year;
printf("나이와 출생 연도를 입력하세요: ");
scanf("%d %d", &age, &year);
printf("당신은 %d 살이며 %d년에 태어났습니다.\n", age, year);
return 0;
}

여기서 우리는 두 개의 정수를 한 번에 캡처하고 있습니다! %d %d 사이의 공백은 scanf()가 입력 간의 공백이나 개행을 기대하도록 합니다.

실수 입력

소수점이 있는 숫자를 입력받고 싶다면, float 타입을 사용합니다:

#include <stdio.h>

int main() {
float height, weight;
printf("신장(m)과 체중(kg)을 입력하세요: ");
scanf("%f %f", &height, &weight);
printf("당신은 %.2f 미터 신장이 있고 %.1f 킬로그램입니다.\n", height, weight);
return 0;
}

%f는 실수를 나타냅니다. 출력 시 .2f.1f는 소수점 자리수를 제어합니다.

문자 입력

occasionally, we just need a single character:

#include <stdio.h>

int main() {
char grade;
printf("성적(A-F)을 입력하세요: ");
scanf(" %c", &grade);  // 주의! %c 앞에 공백이 있습니다
printf("당신의 성적은 %c입니다. ", grade);

if (grade == 'A' || grade == 'B')
printf("great job!\n");
else if (grade == 'C')
printf("not bad, keep improving!\n");
else
printf("let's work harder next time!\n");

return 0;
}

%c 앞의 공백은 scanf()가 공백(개행 포함)을 건너뛰도록 합니다!

문자열 입력

마지막으로, 문자열을 전체로 캡처해보겠습니다:

#include <stdio.h>

int main() {
char name[50];  // 문자열을 저장할 배열
printf("이름은 무엇인가요? ");
scanf("%49s", name);  // %49s는 버퍼 오버플로 방지
printf("안녕하세요, %s! C 프로그래밍에 오신 것을 환영합니다.\n", name);
return 0;
}

다음 사항에 주의하세요:

  1. 문자열을 저장할 문자 배열을 사용합니다.
  2. scanf()에서 name 앞에 &를 붙이지 않습니다. 배열 이름은 이미 주소이기 때문입니다.
  3. %49s는 입력을 49자로 제한하여 버퍼 오버플로를 방지합니다.

scanf() 함수: 더 깊이 알아보자

다양한 포맷 지시자를 요약해보겠습니다:

포맷 지시자 데이터 타입
%d 정수
%f 실수
%c 문자
%s 문자열

scanf()는 강력하지만 조심해야 합니다. 항상 입력이 성공했는지 확인하세요:

#include <stdio.h>

int main() {
int num;
printf("숫자를 입력하세요: ");
if (scanf("%d", &num) == 1) {
printf("입력하신 숫자: %d\n", num);
} else {
printf("잘못된 입력!\n");
}
return 0;
}

이 코드는 scanf()가 성공적으로 하나의 값을 읽었는지 확인합니다 (== 1).

결론

와우! 오늘은 많은 내용을 다루었습니다. 정수에서 문자열까지, 프로그램을 상호작용적으로 만드는 방법을 배웠습니다. 연습이 완벽을 이루는 열쇠입니다. 다양한 입력 유형을 결합한 프로그램을 시도해보세요. 예를 들어, 플레이어의 이름, 나이, 좋아하는 숫자를 입력받는 간단한 게임을 만들어보세요.

프로그래밍은 새로운 언어를 배우는 것과 같습니다 - 자주 사용할수록 더 자연스러워집니다. 그러니 계속 코딩하고, 실험하고, 특히 즐겁게 만들어보세요! 언제나 기억하세요, 모든 프로그래머는 초보자였습니다. 막힐 때가 있으면 괜찮습니다. 질문하고 도움을 요청하세요.

다음에 다시 뵙겠습니다. 행복한 코딩 되세요!

Credits: Image by storyset