2010-1 학기프로그래밍입문 (1) 11 장입출력과운영체제 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr k 0
특징 printf() - 임의의개수의인자출력 - 간단한변환명세나형식을사용한출력제어 A Book on C, 4ed. 11-1
printf() printf(control_string, other_argument) - 예 printf("she sells %d %s for $%f", 99, "sea shells", 3.77); control_string: "she sells %d %s for $%f" other_arguments: 99, "sea shells", 3.77 - 변환명세는 % 로시작하여변환문자로끝남 A Book on C, 4ed. 11-2
printf() printf() 변환문자 변환문자대응되는인자의출력형태 c 문자 d,i 10진정수 u 부호없는 10 진정수 o 부호없는8진정수 x, X 부호없는 16진정수 e 부동소수점수 ; 예 : 7.123000e+00 E 부동소수점수 ; 예 : 7.123000E+00 f 부동소수점수 ; 예 : 7.123000 g e 형식과 f 형식중짧은쪽 G E형식과 f 형식중짧은쪽 s 문자열 p 대응되는인자가 void 포인터임 ; 그값이 16 진수형태로출력됨 n 대응되는인자는정수형포인터로서그값은현재까지출력된문자의개수임 ; 인자는변환되지않음 % %% 의형식으로 % 를출력스트림에씀 ; 대응되는인자는없음. A Book on C, 4ed. 11-3
printf() 예제 printf("she sells %d %s for $%f", 99, "sea shells", 3.77); 변환형식 %d %s %f 대응되는인자 99 "sea shells" 3.77 A Book on C, 4ed. 11-4
printf() % 와변환문자사이에올수있는것들 - 플래그문자들 -빼기기호 - 더하기기호 -공백 -# 기호 -0 - 필드폭 - 정밀도 - h 또는 l -L A Book on C, 4ed. 11-5
printf() 선언과초기화 char c = 'A', s[] = "Blue moon!"; 변환형식 대응되는인자 필드내에서출력형태 비고 %c c "A" 필드폭 1 ( 디폴트 ) %2c c " A" 필드폭2, 우측정렬 %-3c c "A " 필드폭3, 좌측정렬 %s s "Blue moon!" 필드폭 10 ( 디폴트 ) %3s s "Blue moon!" 공간이더필요함 %.6s s "Blue m" 정밀도 6 %-11.8s s "Blue moo " 정밀도 8, 좌측정렬 A Book on C, 4ed. 11-6
printf() 선언과초기화 int i = 123; double x = 0.123456789; 변환형식 대응되는인자 필드내에서출력형태 비고 %d i "123" 필드폭 3 ( 디폴트 ) %05d i "00123" 영으로채움 %7o i " 173" 우측정렬, 8 진수 %-9x i "7b " 좌측정렬, 16 진수 %-#9x i "0x7b " 좌측정렬, 16 진수 %10.5f x " 0.12346" 필드폭 10, 정밀도 5 %-12.5e x "1.23457-01 " 좌측정렬, e- 형식 A Book on C, 4ed. 11-7
scanf() scanf(control_string, other_argument) - 예 char a, b, c, s[100]; int n; double x; scanf("%c%c%c%d%s%lf", &a,&b,&c,&n,s,&x); -control_string: "%c%c%c%d%s%lf" -other_arguments: &a, &b, &n, s, &x A Book on C, 4ed. 11-8
scanf() scanf( ) 변환문자 변환문자 입력스트림에서대응되는문자 대응인자의포인터형 c 공백을포함한모든문자 char d, i 10 진정수 ( 부호는옵션 ) integer u 10 진정수 ( 부호는옵션 ) unsigned integer o 8 진수 ( 부호는옵션 ) unsigned integer x, X 16 진수 ( 부호는옵션 ) unsigned integer e, E, f, g, G 실수 ( 부호는옵션 ) floating type s 공백없는문자열 Char p printf() 함수의 %p 에의해출력되는 void * 것으로일반적으로부호없는 16진정 수임 n, %, [...] 다음표참조 A Book on C, 4ed. 11-9
scanf() scanf( ) 변환문자 변환문자 n 설명 입력스트림의문자와짝을이루지않는다. 대응되는인자는정수 형포인터로서, 지금까지읽어들인문자의개수를저장한다. % 입력스트림에서하나의 % 와짝을이룬다. 대응되는인자는없다. [...] 각괄호 [ ] 안에있는문자들을스캔집합이라한다. 이것은무엇이짝을이루는가를결정한다. ( 아래설명을참조하여라.) 대응되는인자는문자배열의기본주소에대한포인터이고, 이배열은끝에자동적으로추가되는널문자를포함하여대응되는모든문자들을포함할만큼큰크기를가져야한다. A Book on C, 4ed. 11-10
scanf() 제어문자열은다음과같은것을포함할수있음 - 여백 - % 이외의공백문자가아닌일반문자 - % 로시작해서변환문자로끝나는변환명세 - h - l - L A Book on C, 4ed. 11-11
int i; char c; char string[15]; scanf() 예제 scanf("%d, %*s %% %c %5s %s", &i, &c, string, &string[5]); * 입력스트림 : 45, ignore_this % C read_in_this** - i : 45 - c : C - string[0-5] : "read_" - string[5-14] : "in_this**" - scanf() 는 4 를리턴 A Book on C, 4ed. 11-12
fprintf()/fscanf() 각각 printf() 와 scanf() 함수의파일버전 함수원형 int fprintf(file *fp, const char *format, ) int fscanf(file *fp, const char *format, ) fprintf(stdout,...); 와 printf(...); 는같은의미 fscanf(stdin,...); 은 scanf(...); 와같은의미 A Book on C, 4ed. 11-13 SSU
sprintf()/sscanf() 각각 printf() 와 scanf() 함수의문자열버전 함수원형 int sprintf(char *, const char *,...); int sscanf(const char *, const char *,...); A Book on C, 4ed. 11-14 SSU
fopen() fopen(filename, mode) 형태의함수호출은 filename 파일을 mode 에지정된모드로열고, 파일포인터를 리턴함 A Book on C, 4ed. 11-15 SSU
fopen() 모드 모드 "r" "w" "a" "rb" "wb" "ab" 의미읽기위해문서파일열기쓰기위해문서파일열기첨부하기위해문서파일열기읽기위해이진파일열기쓰기위해이진파일열기첨부하기위해이진파일열기 - 모드뒤의 + 는파일을읽기와쓰기로모두연다는것을의미함 A Book on C, 4ed. 11-16 SSU
fopen()/fclose() 파일열기와닫기의전형적인예제코드 #include <stdio.h> int main(void){ int a, sum = 0; FILE *ifp, *ofp; ifp = fopen("my_file", "r"); ofp = fopen("outfile", "w");... fclose(ifp); fclose(ofp); } A Book on C, 4ed. 11-17 SSU
ftell(file_ptr) 파일의임의의위치접근 - 파일위치지시자의현재값을리턴 fseek(file_ptr, offset, place) - 파일위치지시자를 place 부터 offset 바이트떨어 진곳을나타내는값으로설정함 - place 의값은 0(SEEK_SET), SET), 1(SEEK_CUR), 2(SEEK_END) 중하나가될수있는데, 이것들은 각각파일의처음, 현재위치, 파일의끝을나타냄 A Book on C, 4ed. 11-18 SSU
파일의임의의위치접근 파일을역으로출력하는프로그램 #include <stdio.h> int main(void){ } char fname[100]; int c; FILE *ifp; fprintf(stderr, "\ninput a filename: "); scanf("%s", fname); ifp = fopen(fname, "rb"); fseek(ifp, 0, SEEK_END); fseek(ifp, -1, SEEK_CUR); while (ftell(ifp) > 0) { c = getc(ifp); putchar(c); fseek(ifp, -2, SEEK_CUR) ; } return 0; A Book on C, 4ed. 11-19 SSU