Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 비형식 입출력 함수 완벽 정리: getchar, gets, putchar, puts 사용법

비형식(unformatted) 입출력 함수는 사용자가 입력한 단일 데이터를 별도의 서식 지정 없이 그대로 읽어 들이고, 콘솔 화면에 값을 출력할 수 있게 해주는 함수입니다. 이번 글에서는 C 언어의 대표적인 비형식 입력 함수와 출력 함수의 개념, 문법, 실제 동작 예제까지 자세히 살펴보겠습니다.

비형식 입력 함수

C 언어에서 주로 사용되는 비형식 입력 함수는 getchar()gets()입니다.

getchar()

getchar() 함수는 키보드로부터 문자 하나를 입력받아 반환합니다.

기본 문법은 다음과 같습니다.

변수명 = getchar();

사용 예시입니다.

char a;
a = getchar();

getchar() 활용 예제 프로그램

다음은 getchar() 함수를 이용해 텍스트를 파일에 저장한 뒤 다시 읽어 출력하는 C 프로그램입니다.

#include<stdio.h>
int main(){
    char ch;
    FILE *fp;
    fp=fopen("file.txt","w"); // 파일을 쓰기 모드로 열기
    printf("텍스트를 입력한 후 Ctrl+Z를 누르세요:\n");
    while((ch = getchar())!=EOF){
        putc(ch,fp);
    }
    fclose(fp);
    fp=fopen("file.txt","r");
    printf("파일에 저장된 내용:\n");
    char word[100];
    while(fscanf(fp,"%s",word)!=EOF){ // 파일에서 단어 단위로 읽기
        printf("%s\n", word); // 단어마다 한 줄씩 출력
    }
    fclose(fp); // 파일 닫기
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

텍스트를 입력한 후 Ctrl+Z를 누르세요:
This is an example program on getchar()
^Z
파일에 저장된 내용:
This
is
an
example
program
on
getchar()

gets()

gets() 함수는 키보드로부터 공백을 포함한 문자열 전체를 한 번에 입력받습니다.

기본 문법은 다음과 같습니다.

gets(변수명);

gets() 활용 예제

#include<stdio.h>
#include<string.h>
main(){
    char str[10];
    printf("이름을 입력하세요: \n");
    gets(str);
    printf("Hello %s, Tutorialspoint에 오신 것을 환영합니다!", str);
}

실행 결과

이름을 입력하세요:
Madhu
Hello Madhu, Tutorialspoint에 오신 것을 환영합니다!

참고: gets() 함수는 입력받는 문자열의 길이를 제한하지 못해 버퍼 오버플로우(buffer overflow) 위험이 있으므로, 현대의 C 표준(C11)에서는 제거된 함수입니다. 실제 개발 시에는 안전하게 크기를 제한할 수 있는 fgets() 사용을 권장합니다.

비형식 출력 함수

C 언어의 대표적인 비형식 출력 함수는 putchar()puts()입니다.

putchar()

putchar() 함수는 모니터 화면에 문자 하나를 출력합니다.

기본 문법은 다음과 같습니다.

putchar(변수명);

사용 예시입니다.

putchar('a');

puts()

puts() 함수는 모니터 화면에 문자열 전체를 출력하며, 출력 후 자동으로 줄바꿈이 이루어집니다.

기본 문법은 다음과 같습니다.

puts(변수명);

사용 예시입니다.

puts("tutorial");

putc와 getc 활용 샘플 프로그램

다음은 putc와 getc 함수를 함께 사용해 파일에 문자를 저장하고, 다시 읽어 화면에 출력하는 C 프로그램입니다.

#include <stdio.h>
int main(){
    char ch;
    FILE *fp;
    fp=fopen("std1.txt","w");
    printf("텍스트를 입력하세요. Ctrl+Z를 눌러 종료합니다:\n");
    while((ch = getchar())!=EOF){
        putc(ch,fp);
    }
    fclose(fp);
    fp=fopen("std1.txt","r");
    printf("파일에 저장된 내용:\n");
    while ((ch=getc(fp))!=EOF){
        putchar(ch);
    }
    fclose(fp);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

텍스트를 입력하세요. Ctrl+Z를 눌러 종료합니다:
This is an example program on putchar()
^Z
파일에 저장된 내용:
This is an example program on putchar()

마무리

비형식 입출력 함수는 서식 문자열(%d, %s 등) 없이 데이터를 그대로 다루기 때문에 간단한 문자·문자열 처리나 파일 입출력 학습에 매우 유용합니다. getchar와 putchar는 문자 단위, gets와 puts는 문자열 단위로 동작한다는 점만 기억하면 쉽게 활용할 수 있습니다. 다만 gets()는 보안상 위험하므로 실무에서는 반드시 fgets()로 대체해 사용하시기 바랍니다.