제 17 강 formatted I/O shcho.pe.kr
Formats %d - int(십진 정수) %u – int(십진 자연수) %c - char(문자) %f - float(소수점으로 나타낸 실수) %e – 지수형으로 나타낸 실수 %lf - double(길이를 2배) %o – 8진수 %x -16진수 %s - 문자열
%f %lf - float and long float 자리수 %6.2f 총 6자리, 소수이하 2자리로 반올림 Float and double %f %lf - float and long float 자리수 %6.2f 총 6자리, 소수이하 2자리로 반올림 정수부분이 더 크면 무시
Exponential Form Avogadro number = 602200000000000000000000 %e format: 수학에서의 6.022 x 1023처럼 printf("%e\n", 6022E20); 6.022000e+23
More format descriptors %x : 16진수 printf("%d %x\n", 10, 10); 10 a printf("%d %X\n", 10, 10); 10 A %o : 8진수(octal) printf("%d %o\n", 10, 10);
tab의 사용 printf("%d\t%d\t%d", 11,22,33); %5d %4x %-8d %.6d 자리수 tab의 사용 printf("%d\t%d\t%d", 11,22,33); %5d %4x %-8d %.6d printf("%8d%8d", 12, 12345);
int page=732를 다음의 포맷으로 출력한다. %d 연습 int page=732를 다음의 포맷으로 출력한다. printf(“*%d*\n”, page); printf(“*%2d*\n”, page); printf(“*%10d*\n”, page); printf(“*%-10d*\n”, page); printf("%d\t%d\t%d", 11,22,33);
%-10d 왼쪽 정렬 최소 길이
%f와 %e 연습 Const double page=2345.67를 다음의 포맷으로 출력한다. printf(“*%f*\n”, page); printf(“*%lf*\n”, page); printf(“*%e*\n”, page); printf(“*%4.2f*\n”, page); printf(“*%3.1f*\n”, page); printf(“*%10.3f*\n”, page); printf(“*%10.3e*\n”, page); printf(“*%+4.2f*\n”, page); printf(“*%010.2f*\n”, page);
실습 lab17_01/print.c 1부터 80까지의 정수를 한 줄에 4개씩 순서대로 줄력을 하되 8자리로 맞추어 출력을 하게하라. while을 이용한다. 하나의 정수를 출력한 뒤 이 숫자가 4의 배수이면 줄바꿈을 위해 \n을 출력한다.
scanf(format_string, address, address, …) formatted input compare with getchar() scanf(format_string, address, address, …) 예: scanf("%d",&i) 표준 입력에서 정수포맷으로 읽어 정수 값을 변수 i에 저장 예: int i; float x; scanf(“%d %f”,&i, &x);
scanf and getchar() scanf(“%c”, &x); x = getchar(); scanf(“%d”, &x); getchar ???
대응 관계 scanf("%d%f%s", &i, &x, name); 대응 관계의 오류: scanf("%d%f%s", &i, &x); scanf("%d%f", &i, &x, name);
Types int i; float x; double y; scanf("%d%f", &i, &x); scanf(“%d%f”, &x, &i); // NOT syntax error scanf("%lf", &y);
printf("%d:%d\n", hour, min); scanf("%d:%d\n", &hour, &min); Format String printf("%d:%d\n", hour, min); scanf("%d:%d\n", &hour, &min); scanf ("%d:%d", &hour, &min);
실습 lab17_02/dscan.c 다음의 프로그램을 입력하여 적절한 수(예: 1.5)로 테스트해보라. main(){ double x; float y; scanf("%f %f", &x, &y); printf("%f %f\n", x, y); }
실습 lab17_03/dscan2.c dscan.c의 오류를 수정하라.
Return value scanf는 바르게 읽은 항목 수를 반환. #include <stdio.h> int main(){ int i,j,n; n = scanf("%d %d",&i,&j); printf("%d개 읽었음.\n",n); }
Return 값의 사용 n = scanf("%d", &x); while (n==1){ sum += x; } while (scanf("%d%d", &x, &y)==2){ ...
실습 lab17_04/scan_return.c 17_04.txt
실습 lab17_05/scan3.c 3개의 정수를 선언한다. (x,y,z) 한 줄에 3개의 정수를 입력할 수 있도록 scanf 문을 작성한다. 읽어들인 숫자가 몇 개인지 출력한다. 만일 1개 이상이면 x를 출력한다. 만일 2개 이상이면 y도 출력한다. ('를'이 아니고 '도'이다) 만일 3개이면 z도 출력한다.
흔한 오류 1 int i,j,n; n = scanf("%d %d",i,j); Don’t confuse with printf("%d %d",i,j);
흔한 오류 2 int i; float f; scanf(“%d %d”, &i, &f); ???
흔한 오류 3 int i; double f; scanf(“%f”, &f);
최대 세 개의 정수를 읽어들여 평균(float)을 출력하는 프로그램을 작성, 시험하라. 실습 lab17_06/mean.c 최대 세 개의 정수를 읽어들여 평균(float)을 출력하는 프로그램을 작성, 시험하라. 평균이므로 합을 읽은 개수로 나누는 것이 필요하다. 데이터가 하나도 입력이 안된 경우 나눗셈 자체가 불가능하므로 별도로 에러임을 알리는 메시지를 출력한다. 파일명 mean.c
실습 lab17_07/sum.c 표준입력에서 입력되는 정수의 합을 출력하는 프로그램을 작성한다(합은 sum이라는 변수에 저장해보자. 그런데 덧셈을 시작하기 전에 초기 값을 주는 것을 잊지 말아야한다.) 단, 정수를 몇 개 입력할 것인지는 정해져 있지 않으며 정확히 하나씩 입력이 되면(이것을 알아내는 방법은 바로 전에 배웠다) 계속한다. 그렇지 않다면 오류가 있거나 EOF인 것이므로 그때까지의 합을 출력하고 끝난다.
lab17_08/ calc.c 표준 입력에서 두 개의 정수를 받아서 계산하여 출력하는 프로그램을 작성한다. 입력 양식은 10+2 , 9–3 , 8*2 같은 방식이다. 숫자와 부호 사이에는 빈칸이 있으면 좀 어려워지므로 붙여 쓰는 것으로 가정한다. 입력은 %d와 %c를 활용 하면 숫자, 기호를 읽을 수 있다. (*주의 연산 기호를 읽어들일 변수는 char로 선언하자) 읽은 개수가 3개일 때만 출력을 한다. 읽은 개수가 3이면 둘째 글자가 ‘+’ 이냐 ‘-’이냐에 따라 덧셈 또는 뺄셈 등을 한다.
제 17 강 끝. formatted I/O shcho.pe.kr