표준 입출력과 파일 입출력

한준수·2023년 6월 14일
0

C-Lang

목록 보기
5/12

📖 표준 입출력 함수

표준 입력 (stdin, Standard Input) : 키보드 입력
표준 출력 (stdout, Standard Output) : 모니터 출력

printf 와 scanf는 앞에서 많이 사용했으니 생략

📌 문자열 입출력 함수

printf() scanf()

모든 데이터 형식의 입출력

📃 puts() gets()

문자열의 입출력

⌨ 예제코드

#include<stdio.h>

void main(){
	char s[20];
    
    printf("문자열을 입력 :" );
    gets(s);
    
    puts(s);
}

💻 출력

📌 문자 입출력함수

📃getchar()

사용자가 키보드로 Enter를 누를 때까지 입력한 것을 버퍼에 모두 저장해 놓고 그 중에서 한 문자만 꺼냄

📃putchar()

모니터에 문자 하나를 출력

⌨ 예제코드

#include<stdio.h>

void main(){
	char ch;
    
    printf("문자열을 입력하세요 : ");
    ch = getchar();
    putchar(ch);
    
    ch = getchar();
    putchar(ch);
    
    ch = getchar();
    putchar(ch);
}

💻

첫 번째 출력이 AB 를 출력하고 한줄이 개행된 이유는
버퍼에서 처음에 A를 읽고 출력하고 B를 읽고 출력한 다음 엔터(\n)를 입력받아 개행된 것이다.


📖 파일 입출력 함수

📌 파일 입출력의 기본 과정

1단계 : 파일 포인터 선언

FILE *변수이름;

2단계 : fopens() 함수로 파일 열기

변수 이름 : fopen("파일 이름","열기 모드");

3단계 : 파일 처리 함수로 파일을 읽거나 파일에 쓰기

4단계 : fclose() 함수로 파일 닫기

fclose(파일 포인터);

📌 파일의 문자열 읽기 - fgets()

파일로 부터 값을 입력 받을 때 사용하며, 파일 포인터에 지정된 파일에서 문자열을 읽어서 문자 배열에 대입함. 문자열의 최대 길이는 '읽을 최대 문자수 -1'

  • ⌨ 형식
fgets(문자 배열, 읽을 최대 문자수, 파일 포인터);

💻 파일을 통해 데이터를 입력한 후 이를 모니터에 출력하는 프로그램을 작성

메모장 실행 -> 'File Read Sample' 문구 넣음

#include<stdio.h>

void main(){
	char s[20];
    FILE *rfp;
    
    rfp = fopen("c:\\c_study\\data1.txt", "r");
    
    fgets(s,20,rfp);
    
    printf("파일에서 읽은 문자열 : ");
    puts(s);
    
    fclose(rfp);
}

💻 출력

⌨ 텍스트 파일에 끝을 만날 때 까지 파일 읽기

#include<stdio.h>

void main(){
	char str[200];
    FILE *rfp;
    
    rfp = fopen("c:\\windows\\win.ini","r");
    
    for(;;){
    	fgets(str, 200, rfp);
        
        if(feof(rfp))
        	break;
        printf("%s", str);
    }
    fclose(rfp);
}

💻출력결과

📌 서식을 지정하여 파일 읽기 - fscanf()

파일 포인터를 사용하는 것을 제외하고 scanf()와 사용법이 동일하다

  • 형식
fscanf(파일포인터, "서식", 입력할 매개변수들 ...);

⌨ txt 파일에 있는 숫자 더하기

#include<stdio.h>

void main(){
	FILE *rfp;
    int hap = 0;
    int in, i;
    
    rfp = fopen("c:\\c_study\\data2.txt", "r");
    
    for(i = 0;  i < 5; i++){
    	fscanf(rfp,"%d",&in);
        hap = hap + in;
    }
    
    printf("합계 ==> %d\n", hap);
    
    fclose(rfp);
}

💻 결과


파일 문자열 출력 - fputs()

  • 파일에서 데이터를 읽어와 화면에 출력하는 대신 파일에 내용을 씀
  • 단, 파일 포인터에 지정된 파일에 문자열을 출력
  • 형식
fputs(출력할 데이터, 파일 포인터);

⌨ 예제

#include<stdio.h>

void main(){
	char s[20];
    FILE *wfp;
    
    wfp = fopen("c:\\c_study\\data3.txt","w");
    
    printf("문자열을 읿력(최대 19자) : ");
    gets(s);
    
    fputs(s, wfp);
    
    fclose(wfp);
}

💻 결과

아래와 같이 gets로 문자열을 입력 받고
입력 받은 문자열을 fputs를 이용해 메모장에 출력

⌨ copy의 구현

#include<stdio.h>

void main(){
	char str[200];
    FILE *rfp;
    FILE *wfp;
    
    rfp = fopen("c:\\windows\\win.ini","r");
    wfp = fopen("c:\\c_study\\data5.txt","w");
    
    for(;;){
    	fgets(str, 200, rfp);
        
        if(feof(rfp))
        	break;
        
        fputs(str, wfp);
    }
    fclose(rfp);
    fclose(wfp);
}

💻 결과

📌 서식을 지정하여 파일 출력 - fprintf()

파일에 숫자를 출력할 때는 서식을 지정할 수 있는 fprintf() 함수를 사용하는 것이 편리하다.

  • 형식
fprintf(파일 포인터, "서식", 출력할 매개변수들....);

⌨ 숫자를 입력받아 합계를 계산해 메모장에 출력하기

#include<stdio.h>

void main(){
	FILE *wfp;
    int hap = 0;
    int in, i;
    wfp = fopen("c:\\c_study\\data6.txt");
    
    for(i = 0; i < 5; i++){
    	printf("숫자 %d : ", i + 1);
        	scanf("%d", &in);
            hap += in;
    }
    
    fprintf(wfp, "합계 ==> : %d\n", hap);
    fclose(wfp);
}

💻 결과



📃 퀴즈

  • 구구단을 모니터가 아닌 'gugu.txt' 파일에 쓰는 프로그램을 작성하시오.
    • 실행 결과

#include<stdio.h>

void main(){
	FILE *wfp;	// 파일 포인터 변수
    wfp = fopen("c:\\c_study\\gugu.txt","w"); 포인터 변수에 fopen을 통해 파일을 열고 물리경로를 대입
    
    int i, j; // 구구단에 사용될 변수
    
    for(i = 0; i < 10; i++){
    //fprintf를 통해 서식을 지정해 파일에 입력
    	fprintf(wfp,"#제%d단#\t\t",i); 
    }
    fputs("\n\n",wfp)
    for(i = 1; i < 10; i++){
    	for(j = 2; j < 10; j++){
        	fprintf(wfp,"%d X %d = %d",j, i,, j*i);
        }
        fprintf(wfp,"\n");
    }
    // 파일을 닫음
    fclose(wfp);
}

📖 총정리

📌 scanf() / prinft() - 모든 데이터 형식의 입/출력

📌gets() / puts() - 문자열 형식의 입/출력

📌getchar() / putchar() - 문자 1개의 입/출력

📌fopen() / fclose() - 파일 열기/ 닫기

📌fgets() / fputs() - 파일의 문자열 읽기 / 파일의 문자열 출력하기

📌fscanf() / fprintf() - 서식을 지정하여 파일 읽기 / 출력

0개의 댓글