1 / 24

2. scanf () 함수 활용 프로그램

2. scanf () 함수 활용 프로그램. 문제내용 scanf () 함수를 사용하여 모든 데이터 형의 값을 입력 학습내용 다양한 데이터형을 어떻게 읽어들이는지 학습 scanf () 함수의형식 변환 ( 형식서식 ) 문자 ( 기본 ). 형 식 : scanf (“ 형식 문자열” , 인수 ); 하는일 : 표준입력장치 ( 키보드 ) 로부터 입력값을 변수에 저장 형식문자열 : 변환 ( 서식 ) 문자로 구성

selina
Download Presentation

2. scanf () 함수 활용 프로그램

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2. scanf() 함수 활용 프로그램 • 문제내용 • scanf() 함수를 사용하여 모든 데이터 형의값을 입력 • 학습내용 • 다양한 데이터형을 어떻게 읽어들이는지 학습 • scanf() 함수의형식 • 변환(형식서식)문자(기본) 형 식 : scanf(“형식 문자열”, 인수); 하는일: 표준입력장치(키보드)로부터 입력값을 변수에 저장 형식문자열 : 변환(서식)문자로 구성 인 자 : 입력값을 저장할 변수명(문자열 변수나배열을 제외한 변수명 앞에 &를 붙인다. (예 : &var_name, scanf(“%d”, &sum);)

  2. 2. scanf() 함수 활용 프로그램 • 함수의 형식 함수 원형 intscanf(const char * Format, [arguments]…); // scanf( 형식문자열, 인수들 ); 반 환 값 입력 받은 인수의 개수. 인 자 Format 입력할 문자열의 형식. [arguments] Format문자열의 형식으로 키보드로 부터 입력 받아 저장될 변수인자들. 내 용 키보드로부터 문자열을 입력 받아 Format에 정의한 형식으로 지정한 인수에 저장한다.

  3. 2. scanf() 함수 활용 프로그램 • 변환(형식서식)문자(상세) : I : 또는 #include <stdio.h> void main( void ) { char stdMaj[30]={0,}; charstdName[20]={0,}; intstdNum=0; printf("학과를 입력하세요 : "); scanf("%s", stdMaj); printf("학번을 입력하세요 : "); scanf("%d", &stdNum); printf("이름을 입력하세요 : "); scanf("%s", stdName); printf("\n학생의 학과는 \'%s\'이고 ",stdMaj); printf("학번은 \'%d\'이며 ",stdNum); printf("이름은 \'%s\'입니다.\n",stdName); }

  4. 2. scanf() 함수 활용 프로그램 • 사용 예제 • 기본적인 사용 예제 30 20 0 0 0 c 0 0 o 0 0 0 0 m 0 p 0 0 0 0 u 0 0 t 0 0 e … r 0 0 \0 0 0 0 0 … … 0 0 stdName stdNum stdMaj #include <stdio.h> void main( void ) { char stdMaj[30]={0,}; charstdName[20]={0,}; intstdNum=0; printf("학과를 입력하세요 : "); scanf("%s", stdMaj); printf("학번을 입력하세요 : "); scanf("%d", &stdNum); printf("이름을 입력하세요 : "); scanf("%s", stdName); printf("\n학생의 학과는 \'%s\'이고 ",stdMaj); printf("학번은 \'%d\'이며 ",stdNum); printf("이름은 \'%s\'입니다.\n",stdName); } 0 l e e \0 0 0 0 … 0 %s 20141234 %d lee Lee s g (엔터) 20141234 (엔터) Computer (엔터)

  5. 2. scanf() 함수 활용 프로그램 • 사용 예제 • 기본적인 사용 예제 30 20 0 0 0 c 0 0 0 o 0 m 0 0 0 p 0 0 0 u 0 0 0 t 0 0 e … r 0 0 \0 … 0 0… 0 0 0 stdName stdNum stdMaj #include <stdio.h> void main( void ) { char stdMaj[30]={0,}; charstdName[20]={0,}; intstdNum=0; printf("학과를 입력하세요 : "); scanf("%s", stdMaj); printf("학번을 입력하세요 : "); scanf("%d", &stdNum); printf("이름을 입력하세요 : "); scanf("%s", stdName); printf("\n학생의 학과는 \'%s\'이고 ",stdMaj); printf("학번은 \'%d\'이며 ",stdNum); printf("이름은 \'%s\'입니다.\n",stdName); } 0 l e e 0 \0 0 0 … 0 20141234 %s %d %s

  6. 2. scanf() 함수 활용 프로그램 printf("long형을 입력하세요 : " ); scanf("%d", &l ); printf("scanf : %d\n\n", l); printf("8진수형을 입력하세요 : " ); scanf("%o", &o8 ); printf("scanf : %o\n\n", o8); printf("16진수형을 입력하세요 : " ); scanf("%x", &x16 ); printf("scanf : %x\n\n", x16); printf(“float형을 입력하세요 : " ); scanf("%f", &f ); printf("scanf : %f\n\n", f); printf(“double형을 입력하세요 : " ); scanf("%lf", &d ); printf("scanf : %lf\n\n", d); printf("문자열형을 입력하세요 : " ); scanf("%s", s ); printf("scanf : %s\n\n", s); printf("정수 입력하세요\n"); scanf("%4d %3d", &i, &o8); printf("%d, %d\n", i, o8); } • 여러 변환문자를 사용한 예제 #include<stdio.h> void main( void ) { charch=0; short intsi=0; inti=0, o8=0, x16=0; unsignedui=0; long l=0; float f=0; double d = 0; char s[100]={0,}; printf("char형을 입력하세요 : " ); scanf("%c", &ch ); printf("scanf : %c\n\n", ch); printf("short형을 입력하세요 : " ); scanf("%hd", &si ); printf("scanf : %hd\n\n", si); printf("int형을 입력하세요 : " ); scanf("%d", &i ); printf("scanf : %d\n\n", i); printf("unsigned형을 입력하세요 : " ); scanf("%u", &ui ); printf("scanf : %u\n\n", ui);

  7. 2. scanf() 함수 활용 프로그램 • 버퍼 (Buffer) • 두 장치의 양자간의 데이터 전송/처리 속도의 차이를 해결하기 위해, 전송할 정보를 임시로 저장하는 고속 기억장치 • 선입선출(FIFO: First In First Out) 방식인 큐(Queue) 형태 • scanf() 함수사용 시 입력한 내용은 변수에 변환 저장되기 전에 먼저 버퍼에 저장됨 i n p u t 0 \0 0 0 0… 0 i \n n Input Value[20] p 변수 0 0 0 0 0 0 u Input t \n … 버퍼

  8. 2. scanf() 함수 활용 프로그램 • 두 번의 정수 입력 버퍼에 입력된 데이터 변환문자 %d 에 의해, 정수 부분만을 읽어와 변수 a에 저장 변수a에 값 12를 저장한 후 버퍼 상태

  9. 2. scanf() 함수 활용 프로그램 • 두 번의 정수 입력 버퍼에 입력된 데이터 변환문자 %d 에 의해, 정수 부분만을 읽어와 변수 a에 저장 * 버퍼 가장 앞쪽의 개행문자(\n)는 버려짐 변수a에 값 34를 저장한 후 버퍼 상태

  10. 2. scanf() 함수 활용 프로그램 • 자료형에 관계없이 두 번째 입력이 문자일 경우 ? 첫 번째 정수 입력 시 버퍼에 남아있는 개행 문자(\n)를 두 번째 scanf() 함수에서 자동으로 변수 ch에 저장하여 프로그램이 정상 동작하지 못함

  11. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 처음 읽어들인 문자가 공백(스페이스, 탭, 개행)이면 무시한다.(공백인 버퍼를 비움) 0 0 0 0 0 0 0 0 0 0 0 … 0 일반적인 입력 1 1 \n \n 버퍼 arg 1 1

  12. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 처음 읽어들인 문자가 공백 (스페이스, 탭, 개행) 이면 무시한다.(공백인 버퍼를 비움) 0 0 0 0 0 0 0 0 0 0 0 … 0 공백 하나 입력 후 입력 (공백)2 공백 2 \n \n 버퍼 arg (공백)2 2 공백은 버려짐

  13. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 처음 읽어들인 문자가 공백 (스페이스, 탭, 개행) 이면 무시한다.(공백인 버퍼를 비움) 0 0 0 0 0 0 0 0 0 0 0 … 0 여러 공백 입력 후 입력 (공백)(공백)…3 공백 공백 공백 공백 3 \n \n 버퍼 arg (공백)(공백)…3 3 공백들은 버려짐

  14. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 처음 읽어들인 문자가 공백 (스페이스, 탭, 개행) 이면 무시한다.(공백인 버퍼를 비움) 0 0 0 0 0 0 0 0 0 0 0 … 0 탭문자 입력 후 입력 \t4 \t 4 \n \n 버퍼 arg \t4 4 탭은 버려짐

  15. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 처음 읽어들인 문자가 공백 (스페이스, 탭, 개행) 이면 무시한다.(공백인 버퍼를 비움) 0 0 0 0 0 0 0 0 0 0 0 … 0 개행 문자 입력 후 입력 \n\n\n…5 \n \n \n \n … 5 \n \n 버퍼 arg \n\n\n…5 5 개행은 버려짐

  16. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 읽어 들인 문자가 숫자가 아니면 이를 버퍼에 남겨두고 읽지 않는다 • 입력 1에서 %d가 문자a를 받지 못하므로 버퍼가 비워지지 않는다 • 입력 2에서 버퍼에 값이 존재하므로 키보드로 부터 값을 받지 않고 버퍼에 남은 값을 읽으려고 한다. 0 0 0 0 0 0 … … 0 0 입력1 a \n a a 버퍼 초기값 7을 가짐 7 7 입력2 var var a \n a 버퍼 버퍼에 값이 존재함으로 키보드로부터 입력을 받지 않음

  17. 2. scanf() 함수 활용 프로그램 • 버퍼에 남겨지는 개행 문자 (\n) 처리 • 버퍼에서 문자를 읽어오는 문자열 처리 함수 getchar() 활용( getchar()에서 \n을 읽어감) • 프로그램에서 버퍼를 사용하는 작업을 수 차례 처리해야 할 경우, 안전하게 동작할 수 있도록 함

  18. 2. scanf() 함수 활용 프로그램 • scanf(“%d”, &arg)의 여러 입력 형태 • 숫자와 문자를 동시에 입력받는 경우 문제가 발생 • 따라서 버퍼를 비워주는 작업이 필요 0 0 … 0 3 a \n \n 3 3 3 버퍼 7 while((ch = getchar()) != ‘\n’) continue; • 버퍼의 개행 문자 전까지 모두 비워줌 var getchar(); • 하나의 문자를 지워줌 fflush(stdin); • 라이브러리 함수 • - intfflush(FILE * fp); • - stdin은 키보드 입력

  19. 2. scanf() 함수 활용 프로그램 • 버퍼 이해를 위한 scanf() 함수 응용 버퍼에 입력된 데이터 먼저 %d에 의해 정수 부분만 추출하여 정수형 변수 a에 저장 버퍼에 남은 데이터 다음으로 %s에 의해 문자열 부분만 추출하여 문자 배열 str에 저장

  20. 2. scanf() 함수 실습 • 실습 2-1. 각도형의 면적을 구하는 프로그램이다. scanf() 를 사용하여 각입력 값을 받아서 삼각형, 사각형, 원의 면적을 한 프로그램에서 작성하고 이를 출력하여 결과를 보이시오. HINT !!! 1. 넓이 구하는 공식 • 삼각형 (밑변 a X 높이 h X ½ = ?) • 사각형 (가로 x X세로y = ?) • 원 ( 반지름 r X 반지름 r X 3.14 = ? ) 2. 구현 방식 a. 함수에서 계산하는 방식 b. 메인에서 계산하는 방식

  21. 2. scanf() 함수 실습 • 실습 2-2. 메뉴를 통해 동작하는정수, 문자, 문자열 입.출력 프로그램을 작성하세요. 방법1) 비 반복-순차적 수행 • 정수형 입력 및 출력, 문자형 입력 및 출력, 문자열 입력 및 출력이 순차적으로 수행 방법2) 반복- 선택수행 • while(1) 무한루프사용, 연속 수행과종료 가능하도록 작성 • 잘못된 입력 값에 의해 비정상 종료되지 않도록 작성 (getchar() 활용) • 프로그램 작성에 switch-case 혹은 if-else 필요 • 함수 호출 사용 가능 • 프로그램 실행 예시는 다음 슬라이드 참고

  22. 2. scanf() 함수 실습 • 프로그램 실행 예시.

  23. 2. scanf() 함수 실습 • 프로그래밍 실습 – 석차 연명부 • 기존 프로그램에 추가하여 코딩 • 입력 기능 추가 • (심화) 처리 부분사용자 함수로 작성 (average) Chapter1 프로그램 Chapter2 프로그램 변수 선언 입력 변수 선언 및 초기화 처리 (average 부분) 출력 출력

  24. 2. scanf() 함수 실습 • 프로그래밍 실습 – 석차 연명부 • 다음 결과 화면과 같은 출력을 하도록 프로그램을 작성 • 이름은 크기 8의 전공은 크기 16의 문자형 배열(문자열)로 저장 • 학번은 정수형으로 저장 • 국어, 수학, 영어는 실수형으로 저장

More Related