Chapter 12 표준입출력과파일입출력...
1. 표준입출력함수 2. 파일입출력함수
1. 표준입출력함수 표준입출력함수 표준입력 (stdin, Standard Input) : 키보드입력 표준출력 (stdout, StandardOutput) : 모니터출력
1. 표준입출력함수 서식화된입출력함수 printf(), scanf() 서식의위치에올수있는것들
[ 기본 11-1] 서식화된입출력함수사용예 01 #include <stdio.h> 02 03 void main( ) 04 { 05 int a; 06 float b; 07 char ch; 08 char s[20]; 09 10 printf(" 정수를입력 : "); 11 scanf_s("%d", &a); 12 printf(" 실수를입력 : "); 13 scanf_s("%f", &b); 14 printf(" 문자를입력 : "); 15 scanf_s(" %c", &ch, 1); 16 printf(" 문자열을입력 : "); 17 scanf_s("%s", s, 20); 18 --- 정수형을선언한다. --- 실수형을선언한다. --- 문자형을선언한다. --- 문자배열을선언한다. --- 정수를입력한다. --- 실수를입력한다. --- 문자를입력한다. 13 행의 enter 를무시하기위해서 %c 앞에는공백이필요하다. --- 문자열을입력받는다. 배열이름 s 는자체가주소이므로 & 를사용하지않는다.
[ 기본 11-1] 서식화된입출력함수사용예 19 printf("\n 정수의 10 진수 = = > %d\n", a); 20 printf(" 정수의 16 진수 = = > %X\n", a); 21 printf(" 정수의 8 진수 = = > %o\n", a); 22 printf(" 실수 = = > %10.3f\n", b); 23 printf(" 실수 ( 공학용 ) = = > %e\n", b); 24 printf(" 문자 = = > %c\n", ch); 25 printf(" 문자열 = = > %s\n", s); 26 } --- 정수를 10 진수, 16 진수, 8 진수로출력한다. --- 실수를일반방식및공학용으로출력한다. --- 문자및문자열로출력한다.
1. 표준입출력함수 문자열입출력함수 printf(), scanf() 함수 : 모든데이터형식의입출력 puts(), gets() 함수 : 문자열의입출력 문자열만입출력할경우에는 printf( ), scanf_s( ) 함수보다는 gets_s( ), puts( ) 함수를사용 하는것이처리속도가더빠름.
[ 기본 11-2] 문자열입출력함수사용예 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char s[20]; 06 07 printf(" 문자열을입력 : "); 08 gets_s(s, 20); 09 10 puts(s); 11 } --- 문자배열을선언한다. --- 문자열을입력한다. 최대 19 자까지입력할수있다. --- 문자열을출력한다.
1. 표준입출력함수 문자입출력함수 getchar(), getch(), getche() 함수 : 문자하나만입력하는기능 putchar(), putch() 함수 : 문자하나를출력하는기능
[ 기본 11-3] 문자입출력함수사용예 1 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char ch; 06 07 ch = getch( ); 08 putch(ch); 09 10 ch = getch( ); 11 putch(ch); 12 13 ch = getch( ); 14 putch(ch); 15 } --- 문자한개를입출력한다. --- 문자한개를입출력한다. --- 문자한개를입출력한다.
1. 표준입출력함수 getch( ) 키보드를통해문자하나를입력받고, 입력한내용을화면에보여주지않음
[ 응용 11-4] 문자입출력함수사용예 2 01 #include <stdio.h> 02 #include <string.h> 03 04 void main( ) 05 { 06 char password[5] = "5678"; 07 char input[5]; 08 int i; 09 10 printf(" 비밀번호 4 글자를입력하세요 : "); 11 for(i=0 ; i<4 ; i++) 12 input[i] = 1 ; 13 14 if( strncmp(password, input, 4) = = 0) 15 { 16 printf("\n 비밀번호통과 ~~\n"); 17 } 18 else 19 { 20 printf("\n 입력한비밀번호 "); 21 --- 비밀번호를 '5678' 로고정시킨다. --- 입력받은비밀번호를저장하는문자배열이다. --- 문자 4 개를입력받는다 ( 입력한글자는보이지않는다 ). --- 입력한글자 4 개가비밀번호와같으면통과한다. --- 입력한글자 4 개가비밀번호와다를때사용자가입력한내용을출력한다.
[ 응용 11-4] 문자입출력함수사용예 2 22 for(i=0 ; i<4 ; i++) 23 2 (input[i]); 24 25 printf(" 가틀렸음 \n"); 26 } 27 }
1. 표준입출력함수 getche( ) getche( ) 함수는 putch( ) 함수를사용하지않아도입력한글자를바로화면에출력함. 입력할글자를화면에나타내려면 putch( ) 나 putchar( ) 를함께사용해야하는 getch( ) 대신 getche( ) 함수를사용해야간결함. ( 예. [ 기본 11-5] )
[ 기본 11-5] 문자입출력함수사용예 3 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char ch; 06 07 ch = getche( ); 08 09 ch = getche( ); 10 11 ch = getche( ); 12 } --- 문자한자를입력받고, 화면에도보여준다. --- 문자한자를입력받고, 화면에도보여준다. --- 문자한자를입력받고, 화면에도보여준다.
[ 기본 11-6] 문자입출력함수사용예 4 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char ch; 06 07 printf(" 문자열을입력하세요 : "); 08 ch = getchar( ); 09 putchar(ch); 10 11 ch = getchar( ); 12 putchar(ch); 13 14 ch = getchar( ); 15 putchar(ch); 16 } ---문자한자를입력받는다. ---버퍼에서한글자를읽어서화면에출력한다. ---문자한자를입력받는다. ---버퍼에서한글자를읽어서화면에출력한다. ---문자한자를입력받는다. ---버퍼에서한글자를읽어서화면에출력한다.
1. 표준입출력함수 getchar( )
2. 파일입출력함수 파일입출력함수 표준입출력과파일입출력함수 사용하는함수와입출력관련장치가다름
2. 파일입출력함수 파일입출력의기본과정 1 단계 : 파일포인터선언 2 단계 : fopen_s( ) 함수로파일열기 3 단계 : 파일처리함수로파일을읽거나파일에쓰기 4 단계 : fclose( ) 함수로파일닫기 fclose
2. 파일입출력함수 파일을이용한입력 파일의문자열읽기 : fgets( ) 파일로부터값을입력받을때사용하며, 파일포인터에지정된파일에서문자열을읽어서문자배열에대입함. 문자열의최대길이는 읽을최대문자수 1 파일을통해데이터를입력한후이를모니터에출력하는프로그램을작성해보고자함. 메모장실행 File Read Sample 라는문구넣음 C:\temp\data1.txt 로저장 [ 기본 11-7]
[ 기본 11-7] 파일을이용한입력예 1 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char s[20]; 06 FILE *rfp; 07 08 fopen_s(&rfp,"c:\\temp\\data1.txt", "r"); 09 10 fgets(s, 20, rfp); 11 12 printf(" 파일에서읽은문자열 : "); 13 puts(s); 14 15 fclose(rfp); 16 } --- 문자배열을선언한다. --- 파일포인터를선언한다. --- 파일읽기 (r) 모드로연다. 폴더와파일의경로는 '\' 를두개씩써야한다. --- 화면에문자열을출력한다.
2. 파일입출력함수 도스명령어 type 의구현 type : 지정한파일의내용을화면에출력하는기능 [ 시작 ] [ 실행 ] 을선택후 cmd 명령을입력하여명령프롬프트를연다. 다음명령어입력
[ 응용 11-8] 파일을이용한입력예 2 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char str[200]; 06 FILE *rfp; 07 08 fopen_s(&rfp,"c:\\windows\\win.ini", "r"); 09 10 for( ; ; ) 11 { 12 1 (str, 200, rfp); 13 14 if ( 2 (rfp)) 15 break; 16 17 printf("%s", str); 18 } 19 20 3 (rfp); 21 } ---한번에최대 199자까지읽을수있도록배열을선언한다. ---파일포인터를선언한다. ---읽어올파일을연다. ---무한루프다. ---파일에서한줄씩읽어온다. ---파일의끝이라면 for문을종료한다. ---파일의끝이아니므로, 읽은내용을출력한다. ---파일을닫는다.
2. 파일입출력함수 type 명령어프로그램단계
2. 파일입출력함수 서식을지정하여파일읽기 : fscanf_s( ) 파일포인터를사용하는것을제외하고 scanf_s( ) 와사용법이동일 C:\temp\data2.txt 파일에정수 5 줄을쓰고, fscanf_s( ) 함수로읽어온후그숫자들을합하는 프로그램을작성과정 먼저 5 줄의숫자를메모장에적고 C:\temp\data2.txt 로저장함.
[ 기본 11-9] 파일을이용한입력예 3 01 #include <stdio.h> 02 03 void main( ) 04 { 05 FILE *rfp; 06 int hap=0; 07 int in, i; 08 09 fopen_s(&rfp, "c:\\temp\\data2.txt", "r"); 10 11 for (i=0; i<5; i++) 12 { 13 fscanf_s(rfp, "%d", &in); 14 hap = hap + in; 15 } 16 17 printf(" 합계 = = > %d\n", hap); 18 19 fclose(rfp); 20 } --- 파일을닫는다. --- 합계를출력한다. --- 파일포인터를선언한다. --- 합계변수를선언하고초기화한다. --- 읽어올숫자변수와반복을위한변수다. --- 파일을읽기모드 (r) 로읽는다. ---5 회반복하면서파일포인터에서정수를읽어온후합계를누적한다.
2. 파일입출력함수 파일을이용한출력 파일의문자열출력 : fputs( ) 파일에서데이터를읽어와화면에출력하는대신파일에내용을씀 단, 파일포인터에지정된파일에문자열을출력
[ 기본 11-10] 파일을이용한출력예 1 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char s[20]; 06 FILE *wfp; 07 08 fopen_s(&wfp, "c:\\temp\\data3.txt", "w"); 09 10 printf(" 문자열을입력 ( 최대 19 자 ) : "); 11 gets_s(s, 20); 12 13 fputs(s, wfp); 14 15 fclose(wfp); 16 } --- 파일을연다 ('w' 는쓰기모드를뜻한다 ). --- 최대 19 자까지입력할수있다. --- 입력받은내용을파일에쓴다.
2. 파일입출력함수 도스명령어 copy 의구현 copy : 주어진파일을복사하여똑같은파일을하나더만드는명령어 [ 시작 ] [ 실행 ] 을선택한후 cmd 명령을입력하여명령프롬프트창을연다. 파일의복사과정
[ 응용 11-11] 파일을이용한출력예 2 01 #include <stdio.h> 02 03 void main( ) 04 { 05 char str[200]; 06 FILE *rfp; 07 FILE *wfp; 08 09 fopen_s(&rfp, "c:\\windows\\win.ini", "r"); 10 fopen_s(&wfp, "c:\\temp\\data5.txt", "w"); 11 12 for( ;; ) 13 { 14 1 (str, 200, rfp); 15 16 if (feof(rfp)) 17 break; 18 19 2 20 } --- 한줄에최대 199 자까지쓸수있다. --- 읽기용, 쓰기용파일포인터를허용한다. --- 읽기모드와쓰기모드로파일을연다. --- 무한루프다. ------ 읽기용파일에서한줄을읽는다. 최대 199 자까지읽을수있다. ------ 읽기용파일의끝이면 for 문을빠져나간다. ------ 쓰기용파일에한줄을쓴다.
[ 응용 11-11] 파일을이용한출력예 2 21 22 fclose(rfp); 23 fclose(wfp); 24 }
2. 파일입출력함수 서식을지정하여파일출력 : fprintf( ) 파일에숫자를출력할때는서식을지정할수있는 fprintf( ) 함수를사용하는것이편리함 printf( ) 함수와사용법이동일하지만, 파일포인터를지정한다는점이다름
[ 기본 11-12] 파일을이용한출력예 3 01 #include <stdio.h> 02 03 void main( ) 04 { 05 FILE *wfp; 06 int hap=0; 07 int in, i; 08 09 fopen_s(&wfp, "c:\\temp\\data7.txt", "w"); 10 11 for (i=0; i<5; i++) 12 { 13 printf(" 숫자 %d : ", i+1); 14 scanf_s("%d", &in); 15 hap = hap + in; 16 } 17 18 fprintf(wfp, " 합계 = = > : %d\n", hap); 19 20 fclose(wfp); 21 } --- 파일을쓰기모드로연다. ---5 회반복하면서키보드에서입력받은숫자의합계를누적한다. --- 합계를파일에쓴다.
[ 예제모음 30] 구구단을파일에출력
[ 예제모음 30] 구구단을파일에출력 01 #include <stdio.h> 02 03 int main( ) 04 { 05 FILE *wfp; 06 int i, k; 07 08 fopen_s(&wfp, "c:\\temp\\gugu.txt", "w"); 09 10 for( i = 2 ; i <= 9 ; i++ ) 11 fprintf(wfp, " # 제 %d 단 # ", i); 12 13 fprintf(wfp,"\n\n"); 14 15 for ( i = 1 ; i <= 9 ; i ++) 16 { 17 for ( k = 2 ; k <= 9 ; k ++) 18 { 19 fprintf(wfp,"%2dx%2d=%2d ", k, i, k*i); 20 } --- 파일포인터와변수를선언한다. --- 쓰기모드로파일을연다. --- 첫줄에단제목을출력한다. --- 줄넘김을출력한다. --- 반복문을돌면서출력되는구구단을 gugu.txt 에저장한다.
[ 예제모음 30] 구구단을파일에출력 21 fprintf(wfp, "\n"); 22 } 23 24 fclose (wfp); 25 }
[ 예제모음 31] 파일에서읽어온문자열을파일에거꾸로출력
[ 예제모음 31] 파일에서읽어온문자열을파일에거꾸로출력 01 #include <stdio.h> 02 #include <string.h> 03 04 int main( ) 05 { 06 FILE *rfp, *wfp; 07 char str1[200], str2[200]; 08 int size, i; 09 10 fopen_s(&rfp, "c:\\temp\\in.txt", "r"); 11 fopen_s(&wfp, "c:\\temp\\out.txt", "w"); 12 13 while(1) 14 { 15 fgets(str1, 200, rfp); 16 17 if (feof(rfp)) 18 break; 19 20 size = strlen(str1); 21 for( i=size-1; i>=0 ; i--) 22 str2[size-1-i] = str1[i-1]; --- 파일포인터를선언한다. --- 입력문자열, 출력문자열, 변수를선언한다. --- 입력파일과출력파일을연다. ---- 무한루프다. ------ 입력파일의문자열을읽는다. ------ 입력파일의끝이면종료한다. ------' 문자열길이 1' 만큼반복하면입력문자열과출력문자열의위치를바꾼다.
[ 예제모음 31] 파일에서읽어온문자열을파일에거꾸로출력 23 24 str2[size-1] = '\0'; 25 fputs(str2, wfp); 26 fputs("\n", wfp); 27 } 28 29 fclose(rfp); 30 fclose(wfp); 31 } --- 출력문자열의제일끝에널문자를추가한다 ------- 출력문자열을출력파일에쓰고, 줄바꿈을한다.
[12 장요약 ] 1 표준입출력함수 ➊ 키보드로입력하는것을 표준입력 이라하며, 표준입력함수에는 scanf_s( ), gets_s( ), getchar( ) 등이있다. ➋ 모니터로출력하는것을 표준출력 이라하며, 표준출력함수에는 printf( ), puts( ), putchar( ) 등이있다.
[12 장요약 ] 2 파일입출력함수 ➊ 키보드대신파일에서입력을받는함수를 파일입력함수 라고하며, 파일입력함수에는 fscanf_s( ), fgets( ), fgetc( ) 등이있다. ➋ 실행결과를모니터대신파일에출력하는함수를 파일출력함수 라고하며, 파일출력함수에는 fprintf( ), fputs( ), fputc( ) 등이있다. 3 파일입출력기본과정