Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

공부해보잠

데이터 입·출력 본문

자격증/정보처리

데이터 입·출력

heejk 2025. 2. 10. 23:47
데이터 입출력

C 언어에서 표준 입출력 함수 키보드 입력을 받고, 화면에 출력하는 함수입니다.
대표적으로 scanf(), printf(), getchar(), putchar(), puts() 등이 있습니다.

 

C 언어 표준 입·출력 함수 정리

함수명설명예제

함수 설명 예제
printf() 문자열 및 변수 값을 화면에 출력 printf("Hello, World!\n");
scanf() 키보드 입력을 받아 변수에 저장 scanf("%d", &num);
getchar() 한 문자 입력 (엔터 입력까지 대기) ch = getchar();
putchar() 한 문자 출력 putchar(ch);
puts() 문자열 출력 (자동 개행 포함) puts("Hello!");

printf()와 scanf()는 가장 많이 사용되는 입출력 함수
puts()는 자동 개행(\n) 포함하여 문자열 출력


scanf() 함수

C 언어의 표준 입력 함수로, 키보드 입력을 받아 변수에 저장하는 함수 입니다.

 

형식

scanf("서식문자열", 변수주소);
  • 서식문자열: 입력 받을 데이터의 형식을 지정 (%d, %f, %c, %s 등)
  • 변수 주소 (&변수명): 입력받은 값을 저장할 변수의 주소 지정 (& 필요)
scanf("%3d",&a); 
// %서식 문자임을 지정, 3입력자릿수를 3자리로 지정, d 10진수로 입력
//&a입력받은 데이터를 변수 a주소에 저장

 

주요 특징

  • 입력한 값이 변수에 저장됨
  • 변수의 주소(&변수명)를 반드시 사용해야 함 (문자열 제외)
  • 띄어쓰기(공백) 또는 Enter 입력 시 값이 구분됨
  • scanf()는 공백을 무시하지만, 문자열 입력 시 공백을 포함하지 않음
  • 배열(문자열) 입력 시 & 필요 없음

서식문자열

  • printf() 함수에서 사용하는 서식 문자열과 동일하게 적용
  • 주요 서식문자: 
    서식 문자 설명
    %d 정수 입력
    %f 실수 입력
    %c 문자 입력
    %s 문자열 입력
    %lf double형 실수 입력

scanf 예제1 - 정수 입력받기

문제

사용자로부터 정수를 입력받아, 입력한 숫자를 출력하는 프로그램을 작성하세요.

출력 값 : 10

#include <stdio.h>

int main() {
    int a; // 정수를 저장할 변수 a 선언
    printf("숫자를 입력하세요: "); // 입력 안내 메시지 출력
    scanf("%d", &a);  // 사용자가 입력한 정수를 변수 a에 저장
    printf("입력한 숫자: %d\n", a);  // 변수 a의 값을 출력
    return 0;
}

 

scanf 예제2 -두 개의 정수 입력받아 합 구하기

 

문제

사용자로부터 두 개의 정수를 입력받아, 그 합을 출력하는 프로그램을 작성하세요.

#include <stdio.h>

int main() {
    int a, b; // 두 개의 정수를 저장할 변수 선언
    printf("숫자를 입력하세요: "); // 입력 안내 메시지 출력
    scanf("%d %d", &a, &b);  // 두 개의 정수를 입력받아 변수 a, b에 저장
    printf("숫자의 합: %d\n", a + b);  // a와 b를 더한 결과 출력
    return 0;
}

 

 

scanf 예제3 - 실수 입력받아 출력하기

 

문제

사용자로부터 실수를 입력받아, 입력한 값을 소수 둘째 자리까지 출력하는 프로그램을 작성하세요.

float 사용시

#include <stdio.h>

int main() {
    float a; //실수를 저장할 변수 선언
    printf("실수를 입력하세요: "); // 입력 안내 메시지 출력
    scanf("%f", &a); //사용자가 입력한 실수를 변수 a에 저장
    printf("소숫점 둘째자리: %.2f\n", a); //소수점 둘째 자리까지 출력
    return 0;
}

double 사용시
#include <stdio.h>

int main() {
    double a; // 더 정밀한 실수를 저장할 변수 선언
    printf("실수를 입력하세요: "); 
    scanf("%lf", &a); //`double`형 입력은 `%lf` 사용
    printf("소숫점 둘째자리: %.2lf\n", a); //`double` 출력 시 `%.2lf`
    return 0;
}

 

 

scanf 예제4 -문자 입력받아 출력하기

 

문제

사용자로부터 한 개의 문자를 입력받아, 입력한 문자를 출력하는 프로그램을 작성하세요.

 
#include <stdio.h>

int main() {
    char a;  // 문자를 저장할 변수 선언
    printf("문자를 입력하세요: ");  // 입력 안내 메시지 출력
    scanf("%c", &a);  //사용자가 입력한 문자를 변수 a에 저장
    printf("문자를 출력하세요: %c", a);  //변수 a에 저장된 문자 출력
    return 0;
}

 

scanf 예제5- 문자열 입력받아 출력하기

 

문제

사용자로부터 문자열을 입력받아, 입력한 문자열을 출력하는 프로그램을 작성하세요.

 

#include <stdio.h>

int main() {
    char str[100];  // 문자열을 저장할 배열 선언 (최대 99자 + `\0` 포함)
    printf("문자열을 입력하세요: ");  
    scanf("%s", str);  // 문자열 입력 (`&` 필요 없음)
    printf("문자열을 출력하세요: %s", str);  
    return 0;
}

scanf("%s", str);는 공백을 기준으로 입력을 나누므로, 띄어쓰기 포함된 문자열 입력 불가
공백 포함 문자열 입력받으려면 gets(), fgets() 사용

fgets 사용

#include <stdio.h>

int main() {
    char str[100];  
    printf("문자열을 입력하세요: ");  
    fgets(str, sizeof(str), stdin);  // 공백 포함 문자열 입력 가능
    printf("문자열을 출력하세요: %s", str);
    return 0;
}

문자열을 저장하려면 char 배열 사용 (char str[100];)
문자열 입력 시 scanf("%s", str);에서 & 필요 없음
공백 포함 문자열 입력은 fgets(str, sizeof(str), stdin); 사용


Java 표준 입력 (Scanner 클래스 사용)

Java에서는 표준 입력을 받을 때 Scanner 클래스를 주로 사용합니다

import java.util.Scanner; // Scanner 클래스 임포트

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scanner 객체 생성
        
        System.out.print("정수를 입력하세요: ");
        int num = scanner.nextInt();  // 정수 입력
        
        System.out.print("문자열을 입력하세요: ");
        String str = scanner.next();  // 공백 없는 문자열 입력

        System.out.println("입력한 정수: " + num);
        System.out.println("입력한 문자열: " + str);

        scanner.close(); // Scanner 닫기 (자원 해제)
    }
}

 

Scanner의 주요 입력 메서드

메서드 설명 입력 예시
nextInt() 정수 입력 (int) 10
nextDouble() 실수 입력 (double) 3.14
next() 단어 입력 (공백 포함 불가) Hello
nextLine() 한 줄 입력 (공백 포함 가능) Hello World
nextBoolean() true 또는 false 입력 true

 

공백 포함 문자열 입력받기 (nextLine())

주의: 숫자 입력 후 nextLine()을 사용할 때는 버퍼 문제 발생 가능
해결 방법: scanner.nextLine();을 한 번 추가하여 개행 문자 제거

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("정수를 입력하세요: ");
        int num = scanner.nextInt();  
        scanner.nextLine();  // 개행 문자 제거 (버퍼 문제 해결)

        System.out.print("문자열을 입력하세요: ");
        String str = scanner.nextLine();  // 공백 포함 문자열 입력 가능

        System.out.println("입력한 정수: " + num);
        System.out.println("입력한 문자열: " + str);

        scanner.close();
    }
}

//scanner.nextLine();을 추가하면 숫자 입력 후 문자열 입력이 정상적으로 동작

 

  • Java에서 키보드 입력을 받을 때 Scanner 클래스를 사용
  • Scanner를 사용하려면 import java.util.Scanner; 추가해야 함
  • 숫자 입력 (nextInt(), nextDouble()), 문자열 입력 (next(), nextLine()) 가능
  • 공백 포함된 문자열 입력은 nextLine() 사용
  • 숫자 입력 후 nextLine()을 사용할 경우, scanner.nextLine();을 추가하여 버퍼 문제 해결
  • 입력 후 scanner.close();로 자원 해제

printf() 함수

C 언어의 표준 출력 함수로 인수로 주어진 값을 화면에 출력합니다

 

형식

printf("서식문자열", 출력할 값1, 출력할 값2, ...);
  • 서식문자열: 출력할 형식 지정 (%d, %f, %c, %s 등)
  • 출력할 값: 서식문자에 맞는 변수 또는 값

printf() 함수 - 주요 제어문자(이스케이프 시퀀스) 정리

C 언어에서 printf() 함수는 제어문자(이스케이프 시퀀스) 를 사용하여 출력 형식을 조정할 수 있습니다.

 

주요 제어문자 (이스케이프 시퀀스)

제어문자 의미 예제 출력 결과
\n 줄 바꿈 (개행) printf("Hello\nWorld"); Hello 
World
\t 탭 (4~8칸 공백) printf("A\tB"); A B
\\ 백슬래시 출력 printf("\\"); \
\" 큰따옴표 출력 printf("\"Hello\""); "Hello"
\' 작은따옴표 출력 printf("\'A\'"); 'A'
\b 백스페이스 (이전 문자 삭제) printf("ABC\bD"); ABD
\r 캐리지 리턴 (줄 맨 앞으로 이동) printf("Hello\rWorld"); World (Hello 덮어쓰기)
\f 폼 피드 (페이지 넘김) printf("Hello\fWorld"); Hello (새로운 페이지에서 World 출력)
\v 수직 탭 (줄 간격 크게) printf("A\vB"); A ↕ B (줄 사이 간격 확대)
\a 경고음 (벨 소리) printf("\a"); (컴퓨터에서 경고음 발생)

 

예제

#include <stdio.h>

int main() {
    printf("Hello\nWorld\n");  // 줄 바꿈
    printf("Name:\tJohn Doe\n");  // 탭
    printf("Path: C:\\Program Files\\\n");  // 백슬래시 출력
    printf("\"C programming is fun!\"\n");  // 큰따옴표 출력
    printf("\'Single Quotes\'\n");  // 작은따옴표 출력
    printf("ABCD\bE\n");  // 백스페이스 적용 (D 삭제 후 E 출력)
    printf("123\r456\n");  // 캐리지 리턴 (123을 456으로 덮어씀)
    printf("Hello\fWorld\n");  // 폼 피드 (새 페이지로 이동)
    printf("A\vB\n");  // 수직 탭 출력
    printf("\a");  // 경고음 출력
    return 0;
}


출력 예시
Hello
World
Name:   John Doe
Path: C:\Program Files\
"C programming is fun!"
'Single Quotes'
ABCE
456
Hello
       World
A
      B
(컴퓨터에서 경고음 발생)

 

printf()를 이용한 여러 개의 데이터 출력 (진법 변환)

#include <stdio.h>

int main() {
    int num = 250;  // 10진수 값 250을 변수에 저장
    printf("250은 10진수로 %d\n", num); // 10진수 출력
    printf("8진수로 %o\n", num); // 8진수 출력
    return 0;
}
------------------------------------------------------------
실행 결과
250은 10진수로 250
8진수로 372

첫 번째 출력 (%d)
250은 10진수로 %d\n → %d는 10진수 정수를 출력
따라서, 250이 그대로 출력됨

두 번째 출력 (%o)
8진수로 %o\n → %o는 8진수로 변환하여 출력
250을 8진수로 변환하면 372
-----------------------------------------------------------------
진법 변환 (250을 8진수로 변환하는 과정)
10진수 250을 8진수로 변환
250 ÷ 8 = 31 (몫), 2 (나머지)
31 ÷ 8 = 3 (몫), 7 (나머지)
3 ÷ 8 = 0 (몫), 3 (나머지)
따라서, 8진수 372

 

데이터를 출력할 경우 결과

번호코드출력 결과설명

번호 코드 출력 결과 설명
printf("%d", 2543); 2543 정수를 그대로 출력
printf("%3d", 2543); 2543 최소 3자리 공간 확보
(이미 4자리이므로 영향 없음)
printf("%6d", 2543); 2543 최소 6자리 확보,
앞쪽 공백 추가
printf("%-6d", 2543); 2543 최소 6자리 확보, 왼쪽 정렬
printf("%06d", 2543); 002543 최소 6자리 확보,
빈칸을 0으로 채움
printf("%f", 245.2555); 245.255500 기본 float 출력
(소수점 6자리)
printf("%.3f", 245.2555); 245.256 소수점 3자리까지 반올림
printf("%8.2f", 245.2555); 245.26 최소 8자리 확보,
소수점 2자리까지 출력
printf("%e", 245.2555); 2.452555e+02 지수 표기법 출력
printf("%3s", "help me"); help me 최소 3자리 확보
(이미 길이가 7이므로 영향 없음)
printf("%8s", "help me"); help me 최소 8자리 확보,
앞쪽 공백 추가
printf("%.6s", "help me"); help m 문자열에서 최대 6문자만 출력
printf("%-8.6s", "help me"); help m 최대 6문자 출력, 왼쪽 정렬
printf("250은 10진수로 %d\t 8진수로 %o\n", 250, 250); 250은 10진수로 250 8진수로 372 10진수 출력 후 탭(\t),
8진수 변환 출력
printf("a=%8.2f\t b=%e\n", 125.23, 3141.592e-1); a= 125.23 b=3.141592e+02 실수 정렬 후 출력
(8자리, 소수점 2자리 &
지수 표기법)
printf("\'A\'는 문자로 %c, 아스키코드로 %d\n", 'A', 'A'); 'A'는 문자로 A, 아스키코드로 65 문자는 %c,
숫자는 ASCII 코드 값(65)
  • %d → 정수 출력
  • %f / %.nf → 실수 출력 (.n은 소수점 자리수)
  • %e → 지수 표기법
  • %o → 8진수 출력
  • %s / %.ns → 문자열 출력 (.n은 최대 출력 문자 수)
  • %c → 문자 출력
  • %- → 왼쪽 정렬
  • %0n  0을 채워 출력
  • \t → 탭(정렬), \n → 줄 바꿈

Java의 출력 함수

Java에서는 System.out.print(), System.out.println(), System.out.printf() 를 사용하여 데이터를 출력할 수 있다.

 

print() - 줄 바꿈 없이 출력

System.out.print("Hello ");
System.out.print("World");

출력 결과
Hello World

줄 바꿈 없이 문자열을 연속 출력

 

println() - 출력 후 줄 바꿈

System.out.println("Hello");
System.out.println("World");

출력 결과
Hello
World

println()을 사용하면 출력 후 자동으로 줄 바꿈

 

printf() - 서식 지정 출력 (C언어의 printf()와 유사)

System.out.printf("이름: %s, 나이: %d, 키: %.2fcm\n", "Kim", 25, 175.5);

출력결과
System.out.printf("이름: %s, 나이: %d, 키: %.2fcm\n", "Kim", 25, 175.5);

%s → 문자열, %d → 정수, %.2f → 소수점 둘째 자리까지 출력

 

printf()의 주요 서식 문자

서식 문자 설명 예제
%d 정수 출력 System.out.printf("%d", 10);  10
%f 실수 출력 System.out.printf("%f", 3.14);  3.140000
%.2f 소수점 둘째 자리까지 출력 System.out.printf("%.2f", 3.1415);  3.14
%s 문자열 출력 System.out.printf("%s", "Java");  Java
%c 문자 출력 System.out.printf("%c", 'A');  A

 

  • print() → 줄 바꿈 없이 출력
  • println() → 출력 후 줄 바꿈
  • printf() → 서식 지정 출력 (%d, %f, %s 등 사용 가능)

기타 표준 입·출력 함수 정리
함수 분류 설명
getchar() 입력 키보드로 한 문자를 입력받아 변수에 저장하는 함수
gets() 입력 키보드로 문자열을 입력받아 변수에 저장하는 함수 (Enter 키 전까지 입력 가능)
putchar() 출력 인수로 주어진 한 문자를 화면에 출력하는 함수
puts() 출력 인수로 주어진 문자열을 화면에 출력한 후 자동으로 줄을 바꾸는 함수

 

getchar() - 한 문자 입력받기

#include <stdio.h>

int main() {
    char ch;
    printf("문자 입력: ");
    ch = getchar();  // 한 문자 입력받기
    printf("입력한 문자: ");
    putchar(ch);  // 입력한 문자 출력
    return 0;
}

실행 결과
문자 입력: A
입력한 문자: A

 

gets() - 문자열 입력받기 (비추천 - 보안 문제)

gets()는 버퍼 오버플로우(입력 길이 초과) 위험이 있어 사용하지 않는 것이 좋음.
대신 fgets()를 사용할 것을 권장!

#include <stdio.h>

int main() {
    char str[100];
    printf("문자열 입력: ");
    gets(str);  // 문자열 입력받기 (비추천)
    printf("입력한 문자열: ");
    puts(str);  // 문자열 출력
    return 0;
}

실행 결과
문자열 입력: Hello World
입력한 문자열: Hello World

 

fgets() - 문자열 입력 (보안 문제 해결)

#include <stdio.h>

int main() {
    char str[100];
    printf("문자열 입력: ");
    fgets(str, sizeof(str), stdin);  // 안전한 문자열 입력
    printf("입력한 문자열: ");
    puts(str);  // 문자열 출력
    return 0;
}

실행결과
문자열 입력: Hello World
입력한 문자열: Hello World
  • getchar() → 한 문자 입력
  • gets() → 문자열 입력 (보안 문제로 사용 지양, 대신 fgets() 사용)
  • putchar() → 한 문자 출력
  • puts() → 문자열 출력 후 자동 줄 바꿈

파일 입출력 함수
  • 파일을 열고(fopen()), 읽고(fgetc(), fgets(), fscanf()), 쓰기(fputc(), fputs(), fprintf()), 닫는(fclose()) 함수로 구성됨.
  • 표준 입출력(printf(), scanf())과 달리 파일과 직접 연결하여 데이터 저장 가능.
  • 파일 모드(r, w, a 등)를 지정하여 파일을 다룰 수 있음.

파일 입출력의 기본 흐름

  • 파일 열기 (fopen()) → 파일을 생성하거나 기존 파일을 엶
  • 파일 읽기/쓰기 (fgetc(), fgets(), fscanf(), fputc(), fputs(), fprintf())
  • 파일 닫기 (fclose()) → 파일을 닫아 메모리 누수를 방지

 

주요 파일 입·출력 함수

파일을 다루는 핵심적인 함수 (파일을 열고 닫고, 데이터를 읽고 쓰는 기본적인 기능)

함수 설명
fopen(파일명, 모드) 파일을 열고 파일의 시작 주소(포인터)를 반환
fclose(파일 포인터) 파일을 닫고 사용한 메모리를 해제
fscanf(파일 포인터, 서식 문자열, 변수 주소) 파일에서 데이터를 읽어 변수에 저장
fprintf(파일 포인터, 서식 문자열, 변수) 파일에 데이터를 서식 지정하여 출력
  • 파일을 열고(fopen()), 닫고(fclose()), 읽고(fscanf()), 쓰는(fprintf()) 핵심 기능을 담당
  • 파일을 다룰 때 반드시 필요한 함수들

 

기타 파일 입·출력 함수

파일에서 문자 단위로 읽고 쓰는 함수 (보조적인 역할)

함수 설명
fgetc() 파일에서 한 문자 읽기
fgets() 파일에서 문자열 한 줄 읽기
fputc() 한 문자 파일에 출력
fputs() 문자열을 파일에 출력하고 줄을 바꿈
  • 파일에서 문자(fgetc(), fputc()) 또는 문자열(fgets(), fputs())을 읽고 쓰는 함수
  • 파일 입출력에서 보조적으로 사용됨

예제

 

input.txt파일에서 숫자를 읽어 3을 곱한 후 output.txt파일로 출력하는 c언어 프로그램입니다. 결과를 확인하십시요.

#include <stdio.h>

int main() {
    int x;  // 정수를 저장할 변수 선언

    // input.txt 파일을 "읽기(r)" 모드로 열기
    FILE *ifp = fopen("input.txt", "r");

    // output.txt 파일을 "쓰기(w)" 모드로 열기
    FILE *ofp = fopen("output.txt", "w");

    // input.txt에서 정수 하나를 읽어서 x에 저장
    fscanf(ifp, "%d", &x);  

    // x의 값에 3을 곱함
    x = x * 3;  

    // 변경된 x 값을 output.txt에 저장
    fprintf(ofp, "%d", x);

    // 파일 닫기
    fclose(ofp);  // output.txt 닫기
    fclose(ifp);  // input.txt 닫기

    return 0;
}

실행 과정

  1. 파일 열기 (fopen())
    • "input.txt" 파일을 읽기 모드("r") 로 열어 파일에서 데이터를 가져옴
    • "output.txt" 파일을 쓰기 모드("w") 로 열어 결과를 저장할 준비를 함
  2. 파일에서 데이터 읽기 (fscanf())
    • input.txt에 있는 숫자(128)을 읽어서 변수 x에 저장
  3. 연산 수행
    • x에 3을 곱함 → 128 * 3 = 384
  4. 파일에 결과 저장 (fprintf())
    • 연산된 값 384을 "output.txt" 파일에 저장
  5. 파일 닫기 (fclose())
    • fclose(ifp);  input.txt 닫기
    • fclose(ofp);  output.txt 닫기

실행 예시

입력 파일 (input.txt)

128

출력 파일 (output.txt)

384

 

요약

  • fopen("파일명", "모드") → 파일 열기
  • fscanf(파일포인터, "%d", &변수); → 파일에서 값 읽기
  • fprintf(파일포인터, "%d", 변수); → 파일에 값 저장
  • fclose(파일포인터); → 파일 닫기

출저 및 참고

정보처리 산업기사 기본서(시나공)

728x90

'자격증 > 정보처리' 카테고리의 다른 글

반복문  (0) 2025.02.13
제어문  (0) 2025.02.12
연산자  (0) 2025.02.09
변수  (0) 2025.02.09
데이터 타입  (0) 2025.02.09