Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Similar documents
chap7.key

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

歯9장.PDF

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap04-연산자.pptx


Microsoft PowerPoint - chap05-제어문.pptx

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

Microsoft PowerPoint - chap03-변수와데이터형.pptx

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap4 [호환 모드]

PowerPoint 프레젠테이션

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

untitled

PowerPoint 프레젠테이션

C Programming

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lesson13.pptx

제1장 Unix란 무엇인가?

Microsoft PowerPoint - 09_(C_Programming)_(Korean)_File_Processing

Microsoft PowerPoint - 제11강 파일 처리

untitled

슬라이드 1

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - Chap14_FileAccess.pptx

Microsoft PowerPoint - chap11-1.ppt [호환 모드]

OCW_C언어 기초

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

Microsoft PowerPoint - 10_C_Language_Text_Files

PowerPoint Template

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap11.ppt [호환 모드]

11장 포인터

Microsoft PowerPoint - [2009] 02.pptx

C 프로그램의 기본

슬라이드 1

Microsoft PowerPoint APUE(Intro).ppt

BMP 파일 처리

02장.배열과 클래스

OCW_C언어 기초

PowerPoint Presentation

K&R2 Reference Manual 번역본

제7장 C 표준 파일 입출력

제7장 C 표준 파일 입출력

윤성우의 열혈 TCP/IP 소켓 프로그래밊

ABC 11장

13 주차문자열의표현과입출력


untitled

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

제1장 Unix란 무엇인가?

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

Chapter_06

11장 포인터

03장.스택.key

Computer Programming (2008 Fall)

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

Microsoft PowerPoint - C_Programming_Basics.ppt [호환 모드]

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

C 언어 프로그래밊 과제 풀이

본 강의에 들어가기 전

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

슬라이드 1

OCW_C언어 기초

ch15

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

본 강의에 들어가기 전

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

PowerPoint 프레젠테이션

중간고사

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint 프레젠테이션

11장 포인터

Microsoft PowerPoint - 제9강 문자열

ABC 6장

PowerPoint 프레젠테이션

문서의 제목 나눔명조R, 40pt

Microsoft PowerPoint - ch07 - 포인터 pm0415

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

untitled

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - ch07 - 포인터 pm0415

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Microsoft PowerPoint - Ch12.파일.pptx

PowerPoint 프레젠테이션

연습문제만-수정

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

歯7장.PDF

fprintf(fp, "clf; clear; clc; \n"); fprintf(fp, "x = linspace(0, %d, %d)\n ", L, N); fprintf(fp, "U = [ "); for (i = 0; i <= (N - 1) ; i++) for (j = 0

Transcription:

#include <stdio.h> int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고, 에 대해 알아본다. scanf 함수를 이용한 입력 시 에러 처리 방법을 알아본다. 의 기본 개념에 대하여 알아본다. 텍스트 과 바이너리 에 사용되는 표준 C 라이브러 리 함수에 대하여 알아본다. 2

목차 스트림 기반의 입출력 printf 함수 다시 보기 scanf 함수 다시 보기 그 밖의 함수 의 개요 텍스트 바이너리 3 스트림 기반의 입출력 스트림 :연속된 데이터 바이트의 흐름 프로그램의 입출력(I/O) 프로그램이 프로그램의 외부와 상호작용을 하는 것 장치 독립성(device independence) : 입출력 장치의 종류에 관계없이 동일한 방 법으로 입출력을 수행한다. 4

스트림 기반의 입출력 버퍼를 경유한 입출력 표준 C 입출력 라이브러리에서는 입력 스트림의 내부에 버퍼를 두고, 키보드로부 터 입력된 내용을 임시로 버퍼에 저장했다가 특정 시점에 프로그램으로 한 번에 전달한다. 입력 장치와 CPU의 처리 속도 차에도 불구하고 효율적인 입출력이 가능하다. 5 스트림 기반의 입출력 스트림 표준 C 입출력 라이브러리는 스트림을 제공한다. 을 수행하기 위한 기본적인 스트림을 프로그램 시작 시 생성하고, 프 로그램 종료 시 해제한다. stdin, stdout, stderr가 바로 스트림이다. 6

printf 함수 다시 보기 printf 함수의 원형 printf 함수의 형식 문자열의 구조 7 printf 함수 다시 보기 type 필드 : 출력할 값의 형식을 지정 type 필드 앞에 h, l, L 지정 h : short형을 출력 l : long형을 출력 ex. %hd는 short형을 10진수 정수로 출력 ex. %ld는 long형을 10진수 정 수로 출력 L : 실수형 중 long double형을 출력 8

printf 함수 다시 보기 width 필드 : 출력하는 값의 폭을 지정 출력의 폭을 지정하면 전체 폭의 오른쪽에 맞춰서 출력한다. 실수를 출력할 때는 소수점 이하 6자리를 기본적으로 출력한다. 9 printf 함수 다시 보기 precision 필드 : 출력하는 값의 정밀도를 지정 정밀도보다 출력할 정수의 개수가 적으면 0으로 채워서 출력한다. 실수 출력에 정밀도를 지정하면, 소수점 이하 자리수의 개수를 의미한다. 10

printf 함수 다시 보기 flags 필드 : -, +, O, 빈칸, # 문자가 올 수 있다. 11 scanf 함수 다시 보기 scanf 함수의 원형 scanf 함수의 형식 문자열의 구조 12

scanf 함수 다시 보기 type 필드 문자 입력 : %c 정수 입력 : %d, %i, %u, %o, %x, %X 실수 입력 : %e, %E, %f, %g, %G 문자열 입력 : %s 13 scanf 함수 다시 보기 width 필드 : 입력 받을 값의 폭을 지정 입력 받을 값의 자릿수를 지정한다. width 필드를 지정하면 공백 문자로 구분하지 않고도 여러 값을 입력할 수 있다. *는 현재 입력을 무시하라는 의미이다. 14

scanf 함수 다시 보기 scanf 함수의 형식 문자열 사용 예 15 scanf 함수 다시 보기 scanf 함수를 이용한 입력 시 에러 처리 scanf 함수의 리턴 값 : 정상적으로 입력된 항목의 개수 여러 개의 항목을 입력 받을 때는 전체 항목의 개수를 확인한다. 16

scanf 함수 다시 보기 입력에 대한 에러 처리 예(1/4) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: /* Ex13_01.c */ #include <stdio.h> int main(void) int a, b; char op; while ( 1 ) printf("수식을 입력하세요 (0 0 0 입력시 종료) : "); if( scanf("%d %c %d", &a, &op, &b) < 3 ) printf("잘못 입력하셨습니다.\n" "<정수> <연산자> <정수>의 순으로 입력하세요.\n"); continue; 입력에 대한 에러 처리 17 scanf 함수 다시 보기 입력에 대한 에러 처리 예(2/4) 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: if( a == 0 && op == '0' && b == 0 ) break; switch ( op ) case '+': printf("%d + %d = %d\n", a, b, a + b); break; case '-': printf("%d - %d = %d\n", a, b, a - b); break; case '*': printf("%d * %d = %d\n", a, b, a * b); break; case '/': printf("%d / %d = %d\n", a, b, a / b); break; default: printf("잘못된 연산자입니다.\n"); continue; 18

scanf 함수 다시 보기 입력에 대한 에러 처리 예(3/4) 39: 40: 41: 42: 43: 입력 버퍼에 들어 있는 a b c 는 사용되지 않 았으므로 계속 입력 버 퍼에 남아있게 된다. return 0; 19 scanf 함수 다시 보기 입력에 대한 에러 처리 예(4/4) 20

scanf 함수 다시 보기 ffush 함수 : 입력 버퍼를 강제로 비울 때 사용 21 그 밖의 함수 그 밖의 함수 22

그 밖의 함수 함수와 함수 스트림 방식의 입출력 라이브러리는 입출력 장치에 관계없이 동일한 방식으로 입 출력을 처리할 수 있다. 키보드 입력과 파일 입력, 콘솔 출력과 파일 출력을 동일하게 처리할 수 있다. 표준 C 입출력 라이브러리는 함수를 함수와는 별도로 제공한다. 콘솔 출력에는 printf 함수를 사용하고, 파일 출력에는 fprintf 함수를 사용한다. 언제든지 함수 대신 함수를 이용해서 을 처 리할 수 있다. 23 의 개요 의 개요(1/2) 을 할 때는, 먼저 스트림을 생성한 다음에 입출력을 수행해야 한다. fopen 함수로 파일을 열면 파일 포인터가 리턴된다. 파일에 접근하려면 항상 파일 포인터가 필요하다. 일단 파일을 연 다음에는 여러 가지 함수를 이용해서 입출력 작업을 수행한다. 텍스트 : fgetc, fputc, fgets, fputs, fscanf, fprintf 바이너리 : fread, fwrite 모든 입출력이 끝나면 파일을 닫아야 한다. 파일을 닫을 때 fclose 함수를 사용한다. 24

의 개요 의 개요(2/2) 25 의 개요 파일 열기(1/2) 을 수행하려면 우선 fopen 함수를 호출해서 파일을 열어야 한다. fopen 함수의 원형 filename : 파일 이름 mode : 파일 열기 모드 리턴 값 : 생성된 파일 스트림의 파일 포인터를 리턴한다. 파일을 열 수 없으면 널 포인 터를 리턴한다. 기본적으로 파일을 텍스트 파일로 간주한다. 26

의 개요 파일 열기(2/2) 파일 열기 모드 27 의 개요 파일 닫기 이 끝나면 fclose 함수를 호출해서 반드시 파일을 닫아야 한다. fclose 함수의 원형 stream : 파일 포인터 리턴 값 : 파일 닫기가 성공하면 0을 리턴하고, 실패하면 EOF(-1)을 리턴한다. 28

의 개요 ferror 함수 시 발생하는 에러를 확인한다. 리턴 값 : 스트림에 에러가 발생했으면 0을 이 아닌 값을 리턴하고, 에러가 발생하지 않 았으면 0을 리턴한다. feof 함수 파일의 끝인지를 검사한다. 리턴 값 : 읽은 위치가 파일의 끝이면 0이 아닌 값을 리턴하고, 그렇지 않으면 0을 리턴 한다. 29 텍스트 텍스트 함수 30

텍스트 fgetc, fputc 파일로부터 문자 하나를 입력 받거나 출력할 때 사용된다. 31 텍스트 fgetc, fputc를 이용한 텍스트 파일 복사(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: /* Ex13_02.c */ #include <stdio.h> int main(int argc, char *argv[ ]) FILE *fp1, *fp2; char ch; 파일 포인터 변수 선언 if( argc < 3 ) printf("usage: FCopy src_file dest_file\n"); return -1; 입력용 파일 열기 fp1 = fopen(argv[1], "r"); if( fp1 == NULL ) printf("%s 파일 열기 실패\n", argv[1]); return -1; 32

텍스트 fgetc, fputc를 이용한 텍스트 파일 복사(2/2) 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 출력용 파일 열기 fp2 = fopen(argv[2], "w"); if( fp2 == NULL ) printf("%s 파일 열기 실패\n", argv[2]); return -1; while( (ch = fgetc(fp1))!= EOF ) fputc(ch, fp2); fclose(fp1); fclose(fp2); 테스트 파일 복사 파일 닫기 return 0; a.txt 파일을 먼저 생성한 다음 명령 프롬프트에 fcopy.exe a.txt b.txt 로 실행하면 b.txt 파일이 생성된다. 33 텍스트 fgets, fputs 파일로부터 한 줄의 문자열을 입력 받거나 출력할 때 사용된다. fgets str : 읽은 문자열을 저장할 문자 배열의 주소 n : 문자 배열의 크기 stream : 입력용 파일 포인터 리턴 값 : 파일로부터 문자열을 최대 n-1개만큼(또는 줄바꿈 문자까지) 읽어서 str에 저 장한다. 에러를 만나거나 EOF를 만나면 NULL을 리턴한다. fputs str : 저장할 문자열 fp : 출력용 파일 포인터 리턴 값 : 저장한 문자수 34

텍스트 fgets, fputs를 이용한 텍스트 파일 복사(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: /* Ex13_03.c */ #include <stdio.h> #define MAX_BUF 100 int main(int argc, char *argv[ ]) FILE *fp1, *fp2; char buffer[max_buf]; 문자 배열 선언 if( argc < 3 ) printf("usage: FCopy src_file dest_file\n"); return -1; fp1 = fopen(argv[1], "r"); if( fp1 == NULL ) 35 텍스트 fgets, fputs를 이용한 텍스트 파일 복사(2/2) 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: printf("%s 파일 열기 실패\n", argv[1]); return -1; fp2 = fopen(argv[2], "w"); if( fp2 == NULL ) printf("%s 파일 열기 실패\n", argv[2]); return -1; 한 번에 char[100]만큼씩 파일을 읽고 쓰 기 때문에 의 횟수가 훨씬 적 다. 시 적은 양의 데이터를 여러 번 입출력을 하는 것보다는 한 번에 많은 양의 데이터를 입출력하는 것이 더 효율적이다. while( fgets(buffer, MAX_BUF, fp1)!= NULL ) fputs(buffer, fp2); 한 줄씩 문자열 복사 fclose(fp1); fclose(fp2); return 0; 36

텍스트 fscanf, fprintf 형식화된 문자열을 파일로 입출력할 때는 사용된다. stream : 파일 포인터 나머지 매개변수는 scanf, printf 함수와 동일하다. 37 텍스트 성적에 대한 보고서를 생성하는 예제(1/3) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: /* Ex13_04.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT 5 typedef struct student char name[20]; int korean, english, math; double average; STUDENT; int main( ) STUDENT std[max_student]; int i; FILE *fp = NULL; 38

텍스트 성적에 대한 보고서를 생성하는 예제(2/3) 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: for( i = 0 ; i < MAX_STUDENT ; i++ ) printf("학생 정보를 입력하세요 : "); scanf("%s %d %d %d", std[i].name, &std[i].korean, &std[i].english, &std[i].math); std[i].average = (double) (std[i].korean + std[i].english + std[i].math)/3; fp = fopen("report.txt", "w"); if( fp == NULL ) printf("파일 열기 실패\n"); return -1; 텍스트 파일 열기 39 텍스트 성적에 대한 보고서를 생성하는 예제(3/3) 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: for( i = 0 ; i < MAX_STUDENT ; i++ ) fprintf(fp, "%-10s %3d %3d %3d %6.2f\n", std[i].name, std[i].korean, std[i].english, std[i].math, std[i].average); fclose(fp); 텍스트 파일 닫기 return 0; 프로그램 실행 결과 로 생성된 파일 report.txt 김모모 박나나 이만수 최하나 한사랑 텍스트 파일로 출력 100 90 60 80 70 100 90 30 90 80 100 90 50 70 90 100.00 90.00 46.67 80.00 80.00 40

바이너리 바이너리 함수 41 바이너리 fwrite 함수 파일로 바이너리 데이터를 저장한다. fwrite 함수의 원형 buffer : 파일로 저장할 데이터의 주소 buffer는 배열의 시작 주소가 될 수도 있고, 기본형 변수나 구조체 변수의 주소가 될 수도 있다. size : 저장할 데이터 항목 하나의 바이트 크기 count : 저장할 항목의 개수 stream : 파일 포인터이다. 리턴 값 : 저장한 항목의 개수 42

바이너리 fread 함수 파일에서 바이너리 데이터를 읽어온다. fread 함수의 원형 buffer : 파일로 저장할 데이터의 주소 buffer는 배열의 시작 주소가 될 수도 있고, 기본형 변수나 구조체 변수의 주소가 될 수도 있다. size : 저장할 데이터 항목 하나의 바이트 크기 count : 저장할 항목의 개수 stream : 파일 포인터이다. 리턴 값 : 저장한 항목의 개수 43 바이너리 바이너리 파일의 입출력 예제(1/2) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: #include <stdio.h> #include <stdlib.h> int main(void) int arr1[10] = 34, 90, 87, 65, 46, 21, 19, 53, 78, 2 ; int arr2[10]; int i; FILE *fp; fp = fopen("test.dat", "wb"); if( fp == NULL ) printf("파일 열기 실패\n"); return -1; fwrite(arr1, sizeof(int), 10, fp); fclose(fp); 출력용 바이너리 파일 열기 바이너리 파일로 정수형 배열 저장 44

바이너리 바이너리 파일의 입출력 예제(2/2) 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: fp = fopen("test.dat", "rb"); if( fp == NULL ) printf("파일 열기 실패\n"); return -1; fread(arr2, sizeof(int), 10, fp); fclose(fp); 입력용바이너리 파일 열기 바이너리 파일로 정수형 배열 읽기 for( i = 0 ; i < 10 ; i++ ) printf("%d ", arr2[i]); printf("\n"); return 0; 45 바이너리 fseek, ftell 파일의 임의 접근에 사용된다. fseek 함수 : 파일에서 입출력을 수행할 위치를 조정한다. ftell 함수 : 파일의 입출력 위치를 리턴한다. 46

학습정리 스트림 기반의 입출력 : 연속된 데이터 바이트의 흐름을 스트림이라고 한다. 스트 림을 이용하면 입출력 장치의 종류에 관계없이 동일한 방법으로 입출력을 수행할 수 있다. printf 함수 : printf 함수의 형식 문자열의 구조는 다음과 같다. %[flags] [width] [.precision] [h l L]type scanf 함수 : scanf 함수의 형식 문자열의 구조는 다음과 같다. %[*] [width] [h l L]type scanf 함수의 리턴 값을 이용하면 입력 시 에러 처리를 구현할 수 있다. 그 밖의 함수 47 학습정리 파일 열기와 파일 닫기 : 파일 열기에는 fopen 함수를 이용하고, 파일 닫기에는 fclose 함수를 이용한다. FILE *fopen(const char *filename, const char *mode); int fclose(file *stream); 텍스트 함수 바이너리 함수 size_t fread(void *buffer, size_t size, size_t count, FILE *stream); size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream); 48

13 장. 입출력라이브러리 수고하셨습니다. 질문있습니까? 49