비형식(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()로 대체해 사용하시기 바랍니다.