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() 실행결과

댓글

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

이미지
챗지피티의 코덱스( Codex )와 깃허브( Github )를 연결하려고 했지만, 연결이 되지 않아 VSCode에서 직접 연결을 하였다. VSCode에 깃허브를 직접 연결하니 오히려 더 좋은 느낌이다. 코덱스에 프롬프트를 실행하면 자동으로 파일을 만들고 나는 그저 깃허브에 저장소를 만들고 푸시( Push )만 하면 된다. 오히려, 챗지피티 코덱스 페이지에서 연결이 제대로 되지 않은 것이 다행(??)이란 느낌이다. 새로운 것을 시도해 보고, 좀 더 편한 방법을 찾았기 때문이다. 왜 연결이 되지 않는 거냐 ?? 좀 편하게 작업하려고 코덱스( Codex )에 깃허브( Github )를 연결하고자 했다. 인증까지 하고, 윈도우 자동 인증까지 삭제하고 다시 했음에도 연결이 되지 않았다. 아~ 뭐지 ? 찾아보니 버그라고 하는데 ~ 몇 일 동안 계속 이어지는 것 보면 이건 뭔가 문제가 있다고 볼 수 밖에 없다. ( 그 원인과 해결책을 찾을 수가 없다. ) 아아 ~ 코덱스 ~ 인증까지 했는데 깃허브 연결이 왜 안되냐 ~ 다행스럽게도 VSCode에서 연결이 된다는 것을 찾게 되었다. 잘 모르겠는 화면에서 익숙한 아이콘과 제목이 눈에 보였다. 바로 ` IDE에서 시도해 보기 ` 버튼이었다. VSCode에서 할 수 있다는 얘기는 들었지만, 이렇게 보여주니 시도해 보는게 당연하겠지. 일단 자세한 내용을 찾아보니 이미 많은 분들이 VSCode에서 챗지피티의 코덱스를 연결해 사용하고 있었다. VSCode가 깃허브에도 연결되니, 생각해 보면 굳이 코덱스를 웹에서 할 필요는 없겠다는 생각이 들었다. 바로 시도를 해 본다. 새로운 방법을 찾다. 이런 새로운 방법을 찾게 되면 왠지 모를 도파민이 생기는 느낌이다. 어쨌든 VSCode를 실행하고 코덱스를 설치하게 되었다. 평소 웹에서 작업하다보니 VSCode에 설치된 코덱스가 익숙하진 않다. 뭐, 걱정할 필요는 없다. 화면을 캡쳐하고 챗지피티 또는 제미나이에 캡쳐화면 자체를 업로드하고 물어보면 된다. 화면 우측 하단에 프롬프트 입력창이 있다. ...

이 블로그의 인기 게시물

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

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

UWP 지원 종료 확정? 2025년 이후 WinUI3 전환해야 하는 이유