C언어 scanf 문자열 입력 방법 | 문자열 입력하기

C언어를 공부할 때 scanf() 함수를 학습할 것이다.

scanf() 함수는 C언어에서 키보드를 이용해 문자열을 입력받는 함수이다.

하지만, 현재의 Visual Studio 에서 사용시 권장사용은 아니지만 부득이 사용하는 경우 `#define _CRT_SECURE_NO_WARNINGS` 코드를 사용하거나 또는 권장하는 함수를 사용하는 것이 바람직하다.

거두절미하고, 여기서는 scanf() 함수를 사용하여 키보드를 사용한 문자열을 입력하고 입력한 문자열을 화면에 출력하도록 한다.

C언어 scanf() 함수 사용 방법
C언어 scanf() 함수 사용 방법

1. C언어의 scanf() 함수
- 키보드를 사용한 문자열 입력

scanf() 함수는 C언어에서 사용하는 표준 입력 함수이다.

키보드를 사용하여 문자열을 입력받아 컴퓨터에 명령을 내릴 수 있다.

과거 옛날의 모든 프로그램들을 보면 이러한 문자열 입력방식으로 프로그램을 구동하고, 시스템을 만들고 처리했다.

지금도 볼 수 있는 대표적인 문자열 입력 기능은 터미널 또는 콘솔 화면이다.

2. 문자열 입력 기본 문법 scanf()

C언어에서 scanf() 함수가 어떻게 사용되는지 기본 문법을 살펴보자.

scanf() 함수에는 `형식지정자와 변수주소`를 인자로 받아 사용하며, 형식지정자는 데이터의 형태, 변수주소는 배열 변수명으로 간단히 생각할 수 있다.

char name[20];
    
scanf("%s", name);

여기서 주의할 점이 있다.

%s는 공백 전까지만 입력을 받는다는 점이다.

예를 들어, `홍 길동`을 입력하면 `홍`까지만 저장된다.

공백을 포함한 문자열을 입력받고 싶다면 fgets()를 사용하는 방법이 있다.

또한 Visual Studio에서는 scanf 사용 시 보안 경고가 발생할 수 있다.

이 경우 scanf_s 사용하거나 scanf를 사용하려면 별도의 설정이 필요하다.

3. 예제 코드

scanf() 함수가 C언어에서 키보드를 이용한 문자열 입력을 할 수 있다고 언급하였다.

이제 코드에서 어떻게 사용되는지 살펴 본다.

동작의 구조를 위해 scanf() 함수가 사용되는 곳은 별도의 함수로 작성하였다.

단, 해당 코드에서 주목할 부분이 있는데 `#define _CRT_SECURE_NO_WARNINGS`이다.

`#define _CRT_SECURE_NO_WARNINGS` 은 Visual Studio 에서 보안 경고를 무시하는 지시자이다.

지금의 Visual Studio에서 보안 경고에 해당하는 코드가 있다면 컴파일 단계에서 경고를 하게 되고, 컴파일을 중단하지만, `#define _CRT_SECURE_NO_WARNINGS` 사용시 무시되고 컴파일을 진행한다.

Visual Studio 에서 C언어 사용시 scanf() 함수는 안전하지 않은 보안 취약점이 발견된 후, 컴파일 단계에서 unsafe 경고와 컴파일이 중단되지만 `#define _CRT_SECURE_NO_WARNINGS` 사용하면 경고는 무시되고 scanf() 함수를 그대로 사용할 수 있다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/* 함수 선언 */
void CallScanf(void);

/* 프로그램 시작 */
int main(void)
{
    printf("\n----- Start 05-Scanf function \n\n");

    /* 프로그램 종료 */
    CallScanf();

    printf("\n----- End \n\n");

    /* 정상 종료 */
    return 0;
}

void CallScanf(void)
{
    char name[255] = "";

    printf("너의 이름은~? 君の名は~? \n");
    printf("=> ");

    scanf("%s", name);

    printf("%s", name);
}

위의 코드에서 주목할 부분은 CallScanf() 함수이다.

CallScanf() 함수의 역할은 사용자가 키보드로 입력한 문자열을 읽고, 화면에 읽은 문자열을 출력한다.

중요한 코드는 다음과 같다.

  • #define _CRT_SECURE_NO_WARNINGS
    - Visual Studio 에서 scanf() 함수 보안 경고 무시
  • char name[255] = "";
    - 문자 배열 255 공간 확보, 빈 문자열로 초기화
  • scanf("%s", name)
    - 키보드로 입력한 문자열 저장.

4. 실행 결과

이제 위의 코드에 대한 실행 결과는 다음과 같다.

코드를 실행하면 printf() 함수를 사용해 질문을 받기 위한 문자열이 출력된다.
여기서는 이름을 받도록 한다.

scanf() 함수가 실행되며 키보드로 문자열을 입력받기 위한 커서가 깜빡 거리는 것을 볼 수 있다.

커서가 깜빡이는 상태에서 문자열을 입력하고 키보드의 엔터를 치면 입력한 문자열이 출력되는 것을 볼 수 있다.

scanf() 실행결과
scanf() 실행결과

댓글

타입스크립트 기본 타입 종류 | 변수 함수 객체 등에 지정하는 자료형

이미지
타입스크립트( Typescript )의 특징은 변수, 함수, 객체 등에 데이터 타입을 지정하여 오류를 줄이는 역할을 한다. 관대한 자바스크립트( Javascript )의 변수 지정에 데이터 타입을 지정하는 것이 타입스크립트이다. 자바스크립트에서는 변수에 어떤 값이든 자유롭게 넣을 수 있지만, 타입스크립트는 변수, 함수, 객체에 들어갈 값의 종류를 미리 지정할 수 있다. 자바 또는 C# 과 같은 언어들에 데이터 타입을 지정하는 것과 같다고 볼 수 있다. 타입스크립트의 타입에는 여러 종류가 있다. 굳이 나열하면 string, number, boolean, array, object, null, undefined, any, unknown, union, void 가 있다. 타입스크립트 기본 타입 종류 | 변수 함수 객체 등에 지정하는 자료형 ⊙ 타입스크립트 기본 타입 종류 타입스크립트는 자바스크립트에 자료형을 지정한 것이라 볼 수 있으며, 이것을 타입( type )이라 칭한다. 자바스크립트가 자료형에 관대한 특징이 있기 때문에, 의도하지 않은 코드 동작의 오류가 발생할 수 있다. 예를 들어, 자바스크립트의 + 연산자가 대표적인데, + 연산자는 숫자간 덧셈 연산도 하지만, 문자열에 + 가 들어간 경우 문자열 연결 동작을 하기 때문이다. 이 외에도 여러가지 경우들이 있다. 구구절절 말은 많았지만, 자바 또는 C# 처럼 자료형( 데이터 타입, data-type )을 지정한다고 보면 이해가 쉽다. 타입스크립트의 타입 자료형에는 여러가지가 존재하는데 그 중 일부는 다음과 같다. string : 문자열 number : 숫자 boolean : 참/거짓 array : 배열 string[] : 문자열 배열 number[] : 숫자 배열 type : 타입 별칭 interface : 객체 구조 string | number : 문자열 또는 숫자 object : 객체 타입 null : 값이 비어 있음 undefined : 값이 할당되어 있지 않음 any : 아무 타입이나 가능 unknown ...

이 블로그의 인기 게시물

ChatGPT Codex GitHub 연결 해제 방법 (앱 삭제까지 정리)

C언어 return 종류와 차이 | return, return 0, return -1, return n

챗지피티 코덱스와 깃허브 연동 방법 | VSCode 사용하기