⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나 memory에 있는 data를 출력장치로 내보내 주는 작업 입력 출력 입력장치 -------→ 프로그램 내부 -------→ 출력장치 (키보드,디스크,마우스) (메모리) (모니터,디스크,프린터) ⊙ header 파일이란? 각종 매크로나 함수들의 prototype(원형)을 내용으로 하고 있는 파일 어떤 함수를 사용하려면 그 함수의 prototype을 main()함수 위에 기재해 주어야 한다. 그래서 함수들의 prototype이 기재가 되어있는 header 파일들을 main()함수위에 #include <화일명.h> 라는 형식으로 기재한다 5.1 모니터 출력 함수(monitor output function) 종류: putchar(), puts(), printf() putchar() 문자상수 출력시 사용한다. (문자상수: ‘ ‘ 안에 표현되는 1byte글자) puts() 문자열상수 출력시 사용하며 자동 줄바꿈 기능이 있다. (문자열상수: “ “ 안에 표현되는 2byte이상의 글자) printf() 각종 출력 서식에 의해 숫자, 문자, 문자열등 모든 종류의 데이타를 출력하는 함수
1) putchar() 함수 ⑴ 화면에 한 문자 출력시켜주는 함수 ⑵ 형식 : putchar('문자'); 괄호속에는 문자상수, 문자변수, 정수상수, 정수변수, 수식 등을 기재할 수 있다. ⑶ 예제 #include<stdio.h> void main() { putchar('A'); putchar('a'); putchar('\n'); putchar('\\'); putchar(65); putchar(65+32); } #include<stdio.h> void main() { putchar(178); putchar(‘\a’); putchar(232); } 2) puts() 함수 ⑴ 화면에 문자열을 출력시켜주는 함수 ⑵ 형식 : puts("문자열"); +--> 문자열상수, 문자열변수 엄밀한 의미로는 주소값을 기재하게 되어있다. ⑶ 문자열 출력 후 자동으로 줄바꿈(line skip)을 한다. #include<stdio.h> void main() { puts(“MBC”); puts(“SBS”); puts(“박상훈”); }
△ 3) printf() 함수 ⑴ 화면에 문자나 문자열이나 숫자 등을 출력서식을 이용하여 출력시키는 함수 출력서식 : %s, %c, %d, %o, %x, %ld, %f, ... 출력대상 : 출력시키고자 하는 data(상수, 변수, 수식, 함수 등) ⑶ 단순 문자열 출력 -> printf("Hello!\n"); ***숫자 데이터 출력시 방 식 사 용 예 결 과 의 미 %자리수d printf(“%4d”, 12); △ 1 2 4자리 확보 후 뒤에서 앞으로 출력 %-자리수d printf(“%-4d”, 12); 4자리 확보 후 앞에서 뒤로 출력 %0자리수d printf(“%04d”, 12); 4자리 확보 후 빈 공백은 0을 출력 %d printf(“%d”, 12); 출력대상체 자리만큼만 확보한후 출력 *** %d에서 d대신에 o, x, u, ld, lx, lu도 사용 가능하다 [사용예] printf(“숫자는%5d입니다.” , 234); printf(“숫자는%-5d입니다.” , 234); printf(“%숫자는%05d입니다.”, 234); printf(“%숫자는%d입니다.” , 234); [결과] 숫자는 234입니다. 숫자는234 입니다. 숫자는00234입니다. 숫자는234입니다.
△ △△MBC ***문자 데이터 출력시 방 식 사 용 예 결 과 의 미 %자리수c printf(“%4c”, ‘A’); A 방 식 사 용 예 결 과 의 미 %자리수c printf(“%4c”, ‘A’); △ A 4자리 확보 후 뒤에서 앞으로 출력 %-자리수c printf(“%-4c”, ‘A’); 4자리 확보 후 앞에서 뒤로 출력 %c printf(“%c”, ‘A’); 출력대상체 자리만큼만 확보한후 출력 [사용예] printf(“문자는%3c입니다.” , ‘h’); printf(“문자는%-3c입니다.” , ‘h’); printf(“문자는%c입니다.” , ‘h’); [결과] 문자는 h입니다. 문자는h 입니다. 문자는h입니다. ***문자열 데이터 출력시 방 식 사 용 예 결 과 의 미 %자리수s printf(“%5s”, “MBC”); △△MBC 4자리 확보 후 뒤에서 앞으로 출력 %-자리수s printf(“%-5s”, “MBC”); MBC △△ 4자리 확보 후 앞에서 뒤로 출력 %s printf(“%s”, “MBC”); MBC 출력대상체 자리만큼만 확보한후 출력
***실수 데이터 출력시 형식) %a.bf 전체 a 자리수 확보한후 소숫점 이하 b 자리 만큼만 출력 b자리수 보다 소숫점 이하 부분이 더 크면 반올림 예1) printf(“ %6.2f ”, 23.5); 예2) printf(“ %6.2f ”, 123.5); 예3) printf(“ %6.2f ”, 23.557); 예4) printf(“ %6.2f ”, 234567.567); 예5) printf(“ %-7.2f ”, 23.5); 2 3 . 5 1 2 3 . 5 2 3 . 5 6 2 3 4 5 6 7 .
S B M 5.2 키보드 입력 함수(keyboard input function) 종류: getchar(), gets(), scanf() getchar() 문자 1byte 입력시 사용한다. 예) char M = getchar(); gets() 문자열 입력시 사용한다.(문자열 변수를 준비한다.) 예) char M[10]; gets(M); scanf() 각종 입력 서식에 의해 숫자, 문자, 문자열등 모든 종류의 데이타를 입력받는 함수 *** 입력함수들이므로 해당 함수가 호출되면 입력작업을 위해 화면에 커서가 정지한채 입력을 받으 려 한다. 1) getchar() 함수 문자 한 글자를 키보드(키보드버퍼)로 부터 입력 받는다. * SBM이라고 입력 했을경우의 키보드 버퍼의 모습 키보드 버퍼란? 버퍼(buffer: 임시기억장소)는 주변장치들을 위하여 메모리 상에 임시로 준비되는 기억공간을 말한다. 즉, 키보드를 누르면 해당 문자의 키값이 키보드 버퍼에 저장되며 입력함수를 이용하여 입력을 받아 가면 키보드 버퍼의 문자가 지워지게 된다. S B M
예제1) #include<stdio.h> void main() { char M; printf(“ 문자입력 ”); M = getchar(); if( M >= ‘A’ || M <= ‘Z’ ) printf(“\n 입력된 문자는 소문자 %c입니다.”, M); else if( M >= ‘a’ || M <= ‘z’ ) printf(“\n 입력된 문자는 소문자 %c입니다.”, M); else printf(“\n 알파벳이 아니군요..”); } [키보드 버퍼상태] 예제2) #include<stdio.h> void main() { char M,N; printf(“ 문자입력 ”); M = getchar(); N = getchar(); printf(“ 입력된 문자는 %c, %c 입니다.”, M, N); } 결과1) 문자입력 A 입력된 문자는 A, 입니다. 결과2) 문자입력 AB 입력된 문자는 A,B 입니다.
[키보드 버퍼상태] ABCDEFGH 예제2) #include<stdio.h> void main() { char M,N; getchar(); // A getchar(); // B getchar(); // C M = getchar(); //D getchar(); // E getchar(); //F N = getchar(); //G printf(“ 입력된 문자는 %c, %c 입니다.”, M, N); } // 키보드 버퍼를 비워주는 함수 fflush(stdin); // stdin standard input device(표준 입력장치)
2) gets() 함수 문자열을 입력받기 위한 함수이다. 한줄 전체를 입력받는다.(공백도 데이터로 간주한다.) 문자열 변수(문자배열)를 준비한후 입력 받는다. 문자 배열 선언 char M[12]; gets( M ); “ABCD” 가 입력될 경우 M[0] M[1] M[2] M[3] M[4] M[5] M[6] M[7] M[8] M[9] M[10] M[11] M 번지 M[0] M[1] M[2] M[3] M[4] M[5] M[6] M[7] M[8] M[9] M[10] M[11] ‘A’ ‘B’ ‘C’ ‘D’ ‘\0’ M 번지 puts( M ); printf(“ %s “, M);
3) scanf() 함수 문자, 숫자, 문자열을 입력받기 위한 함수이다. 입력서식(%d, %f, %c, %s 등)을 이용하여 입력을 받는다. 입력서식부분에는 입력서식외에 아무것도 넣지 않는다. printf()에서 사용되었던 출력서식 전부가 입력서식을 사용된다. 입력 대상체 부분에는 주소를 입력해야 한다. (& : 주소 연산자 이용) 문자 한글자를 입력 받을 경우( 공백및 엔터를 데이터로 취급하므로 유의) char M; //A 일경우 scanf(“%c”, &M); char M,N; //AB 일경우 scanf(“%c%c”, &M, &N); char M,N; //A B 일경우 scanf(“%c%*c%c”, &M, &N); [키보드 버퍼상태] A B C D %*c 란? 키보드 버퍼에 있는 버퍼 포인터를 우측으로 이동시키라는 의미로써 엔터를 읽지 않고 건너 뛰라는 의미의 기호이다. 즉, 공백이나 엔터를 읽지 않고 건너뛸 경우에 사용하는 기호이다.
단입력 5 5*1= 5 5*2= 10 5*3= 15 5*4= 20 5*5= 25 5*6= 30 5*7= 35 5*8= 40 5*9= 45 또?(y/n) y [입력함수 예제] 문) 구구단 에서 출력할 단을 입력받아 특정한 단을 출력하라. #include<stdio.h> #include<conio.h> void main() { char loop; int i,dan; do{ clrscr(); printf(“단입력 “); scanf(“%d”, &dan); //단을 입력받는다. for(i=1; i<=9 ; i++) printf(“\n%d*%d=%2d”, dan, i, dan*i ); printf(“\n또?(y/n) “); scanf(“%*c%c”, &loop); }while( loop==‘Y’ || loop==‘y’ ); } [키보드 버퍼상태] 5
5.3 파일 출력 함수 ⊙ buffered file 출력 함수 *** 파일출력처리순서*** 파일에 어떤 데이터를 출력하기 위해서는 파일을 보조기억장치상에 만들어 놓고 출력 작업을 수행하기 앞서 파일을 열어야만 한다. 그리고 외부화일에 어떤 데이터를 출력할 때는 외부 화일 이름을 직접 사용할 수 없고 이것 대신에 다른 이름을 사용하게 되는데 이를 파일변수라 하며, stream이라고도 한다. 파일을 열 때 file을 c:\tc30\work라는 directory에 생성할 경우 파일변수 = fopen("c:\\tc30\\work\\test.out“, ”w“); 라는 형식으로 기재한다. 1. 외부화일이름 대신에 사용할 파일 변수 선언 FILE *화일변수; 새로운 파일을 쓰기용 모드로 열면서 파일변수를 지정한다. 이때 쓰기용 모드(w)로 파일을 열면 새로운 파일이 하나 생긴다. 2. 파일변수 = fopen("화일명.확장명“, ”w"); 3. 파일에 출력작업을 수행한다. fputc('문자', 파일변수); fputs("문자열 및 제어문자“,파일변수); fprintf(파일변수,“문자열 및 출력서식 및 제어문자”,출력대상); 4. 출력작업이 모두 끝나면 파일을 닫아준다. fclose(화일변수);
1) fputc() 함수 ⑴ 파일에 하나의 문자를 출력시켜주는 함수 ⑵ 형식 : fputc('문자', 파일변수); 외부화일이름 대신에 사용할 파일 변수 선언 FILE *화일변수; 새로운 파일을 쓰기용 모드로 열면서 파일변수를 지정한다. 이때 쓰기용 모드(w)로 파일을 열면 새로운 파일이 하나 생긴다. 파일변수 = fopen("화일명.확장명“, ”w"); 파일에 출력작업을 수행한다. fputc('문자', 파일변수); fputs("문자열 및 제어문자“,파일변수); fprintf(파일변수,“문자열 및 출력서식 및 제어문자”,출력대상); 출력작업이 모두 끝나면 파일을 닫아준다. fclose(화일변수); 1) fputc() 함수 ⑴ 파일에 하나의 문자를 출력시켜주는 함수 ⑵ 형식 : fputc('문자', 파일변수); ex) FILE* out = fopen(“imsi.txt”, “w”); fputc(‘A’, out); fputc(‘B’, out); fputc(‘\n’, out); fputc(‘C’, out); fclose(out);
2) fputs() 함수 ⑴ 파일에 문자열을 출력시켜주는 함수이다. puts() 함수처럼 line skip을 자동으로 하지 않는다. ∴ 줄을 바꾸어서 출력하고 싶을 경우에는 문자열에 개행문자(‘\n')를 포함시키면 된다. ⑵ 형식 : fputs("문자열 및 제어문자", 화일변수); ex) FILE* out = fopen(“imsi.dat”, “w”); fputs(“MBC”, out); fputs(“KBS\n”, out); fclose(out); 3) fprintf() 함수 ⑴ 파일에 문자나 문자열 그리고 숫자 등을 출력서식을 이용하여 출력시켜 주는 함수이다. ⑵ 형식 : fprintf(화일변수, “문자열 및 출력서식 및 제어문자”, 출력대상체); 4) 프린터에 데이터 출력 파일출력함수를 이용하여 프린터에 출력시키며 파일출력함수에서 파일변수를 기재할 부분에 stdprn를 기재하면 프린터로 출력이 된다. 5) 화면(모니터)에 데이터 출력 파일출력함수를 이용하여 화면에 출력시키며 파일출력함수에서 파일변수를 기재할 부분에 stdout를 기재하면 화면으로 출력이 된다.
[test.out 파일에 출력될 내용] Aa 장미 꽃 6) 예제 #include<stdio.h> void main() { FILE *fp; fp=fopen("test.out","w"); fputc('A',fp); fputc('a',fp); fputc('\n',fp); fputs("장미\n",fp); fprintf(fp,"%s","꽃"); fclose(fp); } [test.out 파일에 출력될 내용] Aa 장미 꽃
5.4 파일 입력 함수 파일 출력함수와 동일한 준비 과정을 거치며 fopen함수의 open mode만 “r”로 바뀐다. 외부화일이름 대신에 사용할 파일 변수 선언 FILE *화일변수; 새로운 파일을 읽기용 모드("r")로 열면서 파일변수를 지정한다. 파일변수 = fopen("화일명.확장명“, ”r"); fgetc(), fgets(), fscanf() 등의 함수를 이용하여 데이터를 읽어들인다. fgetc(파일변수); fgets(문자열변수, 읽을글자수+1, 파일변수); fscanf(파일변수, "입력서식", &변수); 입력작업이 모두 끝나면 파일을 닫아준다. fclose(화일변수);
fgetc() 예제 #include<stdio. h> #include<conio fgetc() 예제 #include<stdio.h> #include<conio.h> void main() { char mun ; FILE * in = fopen(“data.txt”, “r”); clrscr(); while( 1 ) { if( feof(in) ) break; mun = fgetc(in); printf(“%c”, mun); } fclose(in); } 1) fgetc() 함수 ⑴ 파일로부터 한 문자를 입력받는 함수 ⑵ 형식 : fgetc(파일변수); [data.txt 파일의 내용] FreeLec site good... fgetc() 예제 #include<stdio.h> void main() { char A,B,C; FILE * in = fopen(“data.txt”, “r”); A = fgetc(in); B = fgetc(in); C = fgetc(in); fclose(in); printf(“파일로 부터 입력된 문자는\ %c,%c,%c 입니다.”, A,B,C ); } *** feof(파일변수) 함수설명 *** 입력함수를 이용하여 파일에서 데이터를 입력 받을때 사용하는 함수로서 파일의 끝을 검사하는데 사용되는 함수이며 파일포인터가 파일의 끝에 있으면 참값을 그렇지 않으면 거짓값을 return한다.
2) fgets() 함수 ⑴ 파일로부터 문자열을 입력받는 함수 ⑵ 형식 : fgets(문자열변수, 읽을글자수+1의 크기 기재, 파일변수 ); fgets() 예제 #include<stdio.h> void main() { char M[10]; FILE * in = fopen(“data.txt”, “r”); fgets( M, 8, in ); fclose(in); printf(“파일로 부터 입력된 문자열은\ %s 입니다.”, M); } [data.txt 파일의 내용] FreeLec site good...
FreeLec site good... 23 985 0.25 3) fscanf() 함수 ⑴ 파일로부터 문자나 숫자 또는 문자열을 입력받는 함수 ⑵ 형식 : fscanf(화일변수, “입력서식”, &변수); ⑶ 파일에서 문자열을 %s 형식을 이용하여 읽어들일 때 원하는 개수 만큼의 글자만 읽어 들일 수도 있는데 이때는 입력 서식에 읽을 글자수를 정해 주면 된다. 만약, 공백(Space)이나 엔터( )를 만나 데이터를 읽고자 하는 글자수 만큼 덜 읽었더라도 데이터 구분자(공백(Space)이나 엔터( ))를 만나는 그 곳 까지를 하나의 문자열 데이터로 취급한다. 문자열 변수에는 변수이름 앞에 &를 기재하지 않고 읽어들인다. 숫자 data를 읽어들일 때 구분자는 하나 이상의 공백이나 엔터 로 구분한다. *** 파일에 미리 데이터를 저장해 놓고 사용하는 경우에는 데이터와 데이터 사이를 공백이나 엔터로 구분지어 놓고 입력시 자리수를 지정하지 않고 구분자(공백, 엔터)를 이용하여 입력 받는 것이 가장 바람직한 방법이다. scanf() 예제1 #include<stdio.h> void main() { char M[10]; FILE * in = fopen(“data.txt”, “r”); scanf(in, “%s”, M); fclose(in); printf(“파일로 부터 입력된 문자열은\ %s 입니다.”, M); } scanf() 예제2 #include<stdio.h> void main() { int su1, su2; FILE * in = fopen(“data.txt”, “r”); scanf(in, “%d%d”, &su1, &su2); fclose(in); printf(“파일로 부터 입력된 숫자는\ %d와 %d 입니다.”, su1, su2); } [data.txt 파일의 내용] FreeLec site good... [data.txt 파일의 내용] 23 985 0.25
예제 //test.cpp 화일의 내용을 읽어 모니터에 출력, 소문자를 대문자로 출력 #include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { FILE *fp; char ch; fp=fopen("test.cpp", "r"); //test.cpp가 없으면 NULL을 return한다. if( fp == NULL ) printf("\"test.cpp\" 파일이 없습니다!\n"); printf("아무키나 누르면 프로그램 종료\n"); getch(); exit(1); //프로그램을 종료하는 함수로서 stdlib.h에 들어 있다. } clrscr(); while( 1 ) ch=fgetc(fp); if(ch != EOF) //EOF(End Of File : 파일의 끝에 위치한 문자) putchar(ch); if( ch>= 'a' || ch<= 'z‘ ) printf("%c", ch-32); else printf("%c", ch); fclose(fp);