—ฅ/ᐠ. ̫ .ᐟ\ฅ —

언어 및 개념 일반

[C] 📥 입출력 함수

WIFI-Aircat 2025. 1. 13. 22:05

🤍 C 언어의 함수 

: printf, scanf, puts, getchar, gets, fgets, fputs, fscanf, fprintf, fread, fwrite, sprintf, sscanf, getc, putc, fgetc, fputc

 

함수 용도 특징 사용 예시 주요 차이점
printf 포맷된 출력 포맷 문자열을 통해 다양한 형식으로 출력 printf("값: %d\n", 10); 포맷 문자열을 지원 // 파일 입출력: fprintf, 문자열 입출력: sprintf
scanf 포맷된 입력 포맷 문자열을 통해 다양한 형식으로 입력 scanf("%d %s", &num, str); 포맷 문자열을 지원 // 파일 입출력: fscanf, 문자열 입출력: sscanf
puts 문자열 출력 개행 문자가 자동으로 추가 puts("Hello, World!"); 개행 문자 자동 추가 // 파일 입출력: fputs
getchar 단일 문자 입력 한 문자만 입력 받음 c = getchar(); 한 문자 입력
gets 문자열 입력 입력 버퍼의 크기를 검사하지 않음 gets(str); 버퍼 오버플로우 위험 // 파일 입출력: fgets
getc 단일 문자 입력 한 문자 입력, fgetc와 유사 c = getc(stdin); 매크로 // 파일 입출력: fgetc
putc 단일 문자 출력 한 문자 출력, fputc와 유사 putc(c, stdout); 매크로 // 파일 입출력: fputc


- 입출력 위치
    - 표준 입출력 (stdout/stdin) : printf, puts, getchar, gets
    - 파일 입출력 : fputs, fprintf, fscanf, fread, fwrite
    - 문자열 버퍼 : sprintf, sscanf
  
- 포맷 지원 여부
    - 포맷 지원 O : printf, scanf, fprintf, fscanf, sprintf, sscanf
    - 포맷 지원 X : puts, getchar, gets, fgets, fputs, getc, putc



🤍 scanf


 - 버퍼 오버플로우 해결

//입력 크기 제한
scanf("%9s", str);

//fgets로 지정된 크기만큼 문자열 입력(나머지는 버퍼에 남김)
fgets(str, sizeof(str), stdin);


- 필요 없는 특정 위치 입력값 무시

int a, b;
scanf("%d %*d %d", &a, &b);  // '%*d'로 두 번째 입력 정수를 무시


- 반환값 활용

// scanf()는 입력된 항목 수를 반환
int result = scanf("%d %d", &a, &b);
if (result != 2) {
// 반환값이 2가 아니면 잘못된 입력 처리
    while (getchar() != '\n'){  
     ...
    }
}


🤍 printf


- 패딩(padding)과 정렬

float pi = 3.1415926535;
printf("%.2f\n", pi);  // 소수점 이하 2자리까지 출력: 3.14

int num = 42;
printf("%5d\n", num);  // 5칸의 공간에 정렬하여 출력: "   42"
// 숫자가 지정된 칸을 넘지 않으면 왼쪽에 공백 추가
// 문자를 왼/오른쪽으로 정렬하고 남는 공간을 특정 문자로 채울 수 있음
printf("%05d\n", num);  // 0으로 채워서 5자리 숫자로: "00042"
printf("%-5d\n", num);  // 왼쪽 정렬, 공백으로 채움: "42   "


- 반환값 활용

// printf()는 출력된 항목 수를 반환
int count = printf("Hello, world!\n");
printf("출력된 문자 수: %d\n", count);  // 출력된 문자 수를 확인
// output : 14

 


🤍 `printf`와 `scanf`의 출력 형식 지정자

%d 정수형 (부호 있는 10진수 정수를 출력)
%c 문자 하나를 출력 (정수형 값을 받아 해당하는 아스키 문자로 변환하여 출력)
%p 포인터의 주소를 출력 (메모리 주소를 16진수로 표시하며, 일반적으로 메모리 크기만큼 자릿수가 채워짐)
%x, %X 16진수로 출력 (0-9는 그대로, a-f 또는 A-F로 표현)
%o 8진수로 출력 (0-7로 표현)
%s 문자열을 출력 (\0인 NULL 문자를 만날 때까지 문자열의 각 문자를 차례로 출력)
%u 부호 없는 10진수 정수를 출력 (unsigned int 자료형을 사용할 때 사용하며, 음수는 양수로 변환되어 출력됨)
%f 실수형 출력 (소수점 이하 6자리까지 출력, float 자료형에 주로 사용)
%lf 실수형 출력 (소수점 이하 6자리까지 출력, double 자료형에 사용되며 더 높은 정밀도를 제공)
%e 지수 형식으로 실수를 출력 (예: 1.23e+03)
%g 실수를 출력할 때 자동으로 %f 또는 %e 형식을 선택하여 더 간결한 형식으로 출력 (지수 형식 또는 고정 소수점 형식 중 더 적합한 형식을 자동으로 선택)

 

반응형