1. 입출력( scanf, printf, gets, fgets )

2025. 2. 4. 21:35·SW개발/갑자기 C코테를 봐야할때
목차
  1. 📌 C 언어 입출력 정리
반응형

📌 C 언어 입출력 정리

1. 표준 입력 (Standard Input)

기능 함수
정수 입력 scanf("%d", &a);
실수 입력 scanf("%f", &b);
문자 입력 getchar();
문자열 입력 (BOF 위험 있음) gets(str);
문자열 입력 (글자수를 지정해야함) fgets(str, sizeof(str), stdin);

 

2. 표준 출력 (Standard Output)

기능 함수
정수 출력 printf("%d", a);
실수 출력 printf("%.2f", b);
문자 출력 putchar(ch);
문자열 출력 puts(str);

1. printf

> 기본 문법

#include <stdio.h>

int main() {
    int num = 10;
    printf("출력 값: %d\n", num);
    return 0;
}

 

> 포멧 지정자

포맷 지정자 설명 예제
%d 정수(int) printf("%d", 10);
%ld 긴 정수(long) printf("%ld", 1234567890L);
%u 부호 없는 정수(unsigned int) printf("%u", 3000000000U);
%f 부동 소수점(float) printf("%f", 3.14f);
%lf 부동 소수점(double) printf("%lf", 3.1415926535);
%e 지수 표기법(float, double) printf("%e", 3.14e-10);
%g 자동 지수/고정 소수점 선택 printf("%g", 3.14);
%c 문자(char) printf("%c", 'A');
%s 문자열(char 배열) printf("%s", "Hello");
%p 포인터 주소 printf("%p", (void*)&num);
%x 16진수(hexadecimal, 소문자) printf("%x", 255); // ff
%X 16진수(hexadecimal, 대문자) printf("%X", 255); // FF
%o 8진수(octal) printf("%o", 255); // 377

 

※ 소수점 자리수 지정

printf에서는 %.nf 또는 %.nlf 형식을 사용하여 소수점 아래 n자리까지 출력

#include <stdio.h>

int main() {
    double num = 3.1415926535;
    
    printf("%.1f\n", num);  // 소수점 1자리
    printf("%.2f\n", num);  // 소수점 2자리
    printf("%.5f\n", num);  // 소수점 5자리
    printf("%.10f\n", num); // 소수점 10자리
    
    printf("%8.2f\n", num);   // 최소 8칸 확보, 소수점 2자리
	printf("%08.2f\n", num);  // 앞을 0으로 채움 (패딩)
    
/* 출력결과
    3.14
00003.14
*/
    
    return 0;
}

 

 


2. scanf

> 기본 문법

#include <stdio.h>

int main() {

	//기본(1개) 입력
    int num;
    scanf("%d", &num); // %d : 포맷 지정자, &num : 값을 저장할 메모리 주소
    printf("입력된 값: %d\n", num);

	//여러 개 입력
    int a, b;
    scanf("%d %d", &a, &b);
    printf("입력된 값: %d, %d\n", a, b);
    
    return 0;
}

 

> 포맷 지정자

포맷 지정자 설명 예제
%d 정수(int) scanf("%d", &a);
%ld 긴 정수(long) scanf("%ld", &a);
%f 부동 소수점(float) scanf("%f", &a);
%lf 부동 소수점(double) scanf("%lf", &a);
%c 문자(char) scanf("%c", &a);
%s 문자열(char 배열) scanf("%s", str);
%u 부호 없는 정수(unsigned int) scanf("%u", &a);
%x 16진수 입력 scanf("%x", &a);

 

> 주의 사항 !!!!

 

1. scanf는 공백(공백 문자, 개행 문자)을 자동으로 무시하지 않음(%c로 문자 입력을 받을 경우 특히 주의)
→ scanf(" %c", &ch); 처럼 앞에 공백을 추가하여 해결할 수 있음.
→ 공백이 포함된 문자열을 받을 거라면, fgets를 이용하자


2. scanf는 입력 길이 제한 없음.

→  배열의 크기를 초과할 경우 버퍼 오버플로우가 발생할 수 있음

#include <stdio.h>

int main() {
    char str[5];  // 5개 크기 배열
    scanf("%4s", str);  // [4자 입력 제한 + '\n'] (총 5자) 오버플로우 방지
    printf("입력된 문자열: %s\n", str);
    return 0;
}

 

3. 정수와 문자열이 함께 섞여있을때

#include <stdio.h>

int main() {
    int age;
    char name[50];

    printf("나이 입력: ");
    scanf("%d", &age);
    
    getchar();  // 개행 문자 제거
    
    printf("이름 입력: ");
    fgets(name, sizeof(name), stdin);

    printf("이름: %s나이: %d\n", name, age);
    return 0;
}

3. gets

> 기본 문법

#include <stdio.h>

int main() {
    char str[50];
    printf("문자열 입력: ");
    gets(str);  // 버퍼 오버플로우 위험
    printf("입력된 문자열: %s\n", str);
    return 0;
}

 

  • 입력 길이 제한이 없음 → 버퍼 오버플로우 발생 가능
  • 보안에 취약하여 C11 이후 표준에서 제거됨
  • 대체 방법: fgets를 사용할 것!

 


4. fgets

> 기본 문법

#include <stdio.h>

int main() {
    char str[50];
    printf("문자열 입력: ");
    fgets(str, sizeof(str), stdin);  // 최대 (sizeof(str) - 1)개 문자 입력 가능
    printf("입력된 문자열: %s", str);
    return 0;
}

 

  • 공백 포함 문자열 입력 가능 → scanf("%s", str);는 공백을 기준으로 입력을 끊지만, fgets는 공백 포함 가능
  • 버퍼 오버플로우 방지 → 지정한 크기만큼만 입력을 받음
  • 개행 문자(\n) 포함 → Enter(개행 문자)까지 포함하여 입력받음
    → 필요하면 수동으로 str[strcspn(str, "\n")] = '\0';을 사용하여 개행 제거

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'SW개발 > 갑자기 C코테를 봐야할때' 카테고리의 다른 글

2. 정렬( qsort() )  (0) 2025.02.04
  1. 📌 C 언어 입출력 정리
'SW개발/갑자기 C코테를 봐야할때' 카테고리의 다른 글
  • 2. 정렬( qsort() )
코코도롱
코코도롱
    반응형
  • 코코도롱
    도롱이의 전자공학소
    코코도롱
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • AI (16)
        • 데이터 분석과 모델 학습 (4)
        • 모델별 정리 (7)
        • (PJT)음성 화자 분류 (4)
      • SW개발 (38)
        • C++ (9)
        • 면접을 위한 CS 전공지식 노트 (24)
        • Django+Vue.js (0)
        • 이런저런 개발이야기 (1)
        • 갑자기 C코테를 봐야할때 (2)
        • RPI5 프로젝트 (1)
        • 트러블슈팅 (1)
      • ESG (2)
        • 내가 쓰는 Assay (1)
        • 뉴스 스크랩 (1)
      • 반도체 (4)
        • 반도체 (3)
        • 슬기로운 학부생활 (1)
        • 회로 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    멀티프로세스
    MySQL
    전공 지식
    데이터분석 #데이터전처리 #결측치 #머신러닝 #딥러닝 #Pandas #DataFrame
    입출력관리
    ESG
    요약본
    페이징 기법
    홉바이홉
    os구조
    반도체 공학
    c언어 입출력
    면접을 위한 cs전공지식 노트
    반도체 물성
    보고서 수식
    운영체제
    LAN
    word 수식
    홉바이홉통신
    ios7계층
    데이터분석 #머신러닝 #딥러닝 #데이터사이언스 #알고리즘 #데이터전처리
    공백포함입력받기
    CS지식
    c io
    메시지큐
    반도체 소자 공학
    파일입출력 #DataFrame불러오기
    면접을 위한 CS 전공지식 노트
    데이터전처리 #데이터분석 #딥러닝 #머신러닝 #Pandas #Numpy #Python
    정리본
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코코도롱
1. 입출력( scanf, printf, gets, fgets )
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.