1 / 50

제 10 장 문자 입출력 함수

제 10 장 문자 입출력 함수. 목 차. 문자 입출력 함수 개요 단일 문자 입출력 함수 문자열 입출력 함수 연습문제. 문자 입출력 함수. 처음에는 함수의 부재로 고생하게 되지만 나중에는 그 함수들을 만들게 됨 문자 입출력 함수는 크게 단일문자 입출력함수와 문자열 입출력함수로 나뉨. 문자 입출력 함수의 종류. 문자 입출력 함수의 종류. 출력한다 . put, print 라는 단어가 들어감 예 ) print f(), put s(), put c(), f print f() 입력한다 .

elliot
Download Presentation

제 10 장 문자 입출력 함수

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. 제 10 장 문자 입출력 함수

  2. 목 차 • 문자 입출력 함수 개요 • 단일 문자 입출력 함수 • 문자열 입출력 함수 • 연습문제

  3. 문자 입출력 함수 • 처음에는 함수의 부재로 고생하게 되지만 나중에는 그 함수들을 만들게 됨 • 문자 입출력 함수는 크게 단일문자 입출력함수와 문자열 입출력함수로 나뉨

  4. 문자 입출력 함수의 종류

  5. 문자 입출력 함수의 종류 • 출력한다. • put, print라는 단어가 들어감 • 예) printf(), puts(), putc(), fprintf() • 입력한다. • get, scan이라는 단어가 들어감 • 예) getc(), getchar(), scanf(), fscanf() • 파일에서 입출력을 처리한다. • 가장 앞 머리에 ‘f’가 들어감 • 여기서의 파일이란 개념은 우리가 일반적으로 알고 있는 파일이 아닌 유닉스의 파일 개념을 따름 • 일반적인 의미에서의 파일이란 하드 디스크에 저장되어 있는 파일을 뜻하지만 유닉스에서의 파일이란 플로피 디스크나 마그네틱 디스크, CD ROM등이 모두 될 수 있음 • 결국 파일에 무언가 쓴다는 것은 하드 디스크 뿐만 아니라 CD ROM에 기록하는 것도 포함됨 • C가 유닉스라는 운영체제를 만들기 위해서 탄생한 만큼 꼭 알아두어야 하는 개념임 • 예) fputc(), fputs(), fgets(), fprintf(), fscanf()

  6. 문자 입출력 함수의 종류 • 하나의 문자를 입출력 • 가장 끝머리에 c나 char이 들어감 • 예) getc(), getchar(), putc(), putchar() • 문자열을 처리 • 가장 끝머리에 s가 들어감 • 예) gets(), puts()

  7. 문자 입출력 함수의 종류 • 사용자로부터 이름을 입력 받고 싶다. • fgets()를 사용 • gets()나 scanf()를 사용할 수도 있지만 fgets()를 사용하는 것이 좋음 • gets()는 문자열을 다룰 때 절대 사용하지 말아야 할 함수이며 scanf()는 공백이 포함된 문자열을 다룰 때 문제가 발생함 • 사용자로부터 하나의 문자를 입력 받고 싶다. • (사용자에게 어떤 문제를 제시하고 ‘y’나 ‘n’과 같은 간단한 문자를 입력 받아 처리하고 싶을 때가 이에 해당) • getchar()을 사용 • getc()나 fgetc()는 일단 파일에서 입력 받는다고 생각하고 제외 (STDIO를 사용하면 사용자로부터 받을 수 있음) • scanf()는 너무 무거운 함수이기 때문에 사용을 자제해야 함

  8. 문자 입출력 함수의 종류 • 파일에서 문자열을 입력 받는다. • 파일에서 문자열을 입력 받을 때는 두 부류로 나눌 수 있는데 파일의 내용이 어떤 규칙성을 가지며 행 단위로 배열되어 있다면 fscanf()를 사용하는 것이 편리하고 특별한 규칙성이 없이 읽어 들이는 것에만 초점이 맞추어져 있다면 fgets()를 사용하는 것이 편리 • 일반적으로는 파일에서 읽어 들일 때에는 fscanf()나 fgets()보다는 fgetc()나 getc()를 많이 사용 • 왜냐하면 파일을 C로 처리할 때는 비트나 바이트 단위로 처리할 때가 많으며 문자열 단위로 읽어 들이는 경우가 많지 않기 때문임 • 화면에 하나의 문자를 출력하고 싶다. • printf()나 putchar()를 사용 • 일반적으로 하나의 문자라도 printf()를 사용하는 경우가 많은데 하나의 문자를 출력할 때는 꼭 putchar()를 사용하는 것이 좋음. (putchar()이 printf()보다 훨씬 가벼운 함수이며 빠르기 때문)

  9. 문자 입출력 함수의 종류 • 화면에 문자열을 출력하고 싶다. • 이때는 두 가지로 분류해 볼 수 있다. 화면에 단순히 출력하는 경우와 특정한 형식에 맞추어서 출력하는 경우이다. 단순히 문자열만 출력하려면 puts()를 사용하는 것이 좋은데 특히 puts()는 자동 개행문자를 포함하기 때문에 좀더 심플하게 출력이 가능함 • 하지만 특정한 형식에 맞추어서 문자열을 출력하려면 puts()는 그 기능을 하지 못하므로 printf()를 사용 (간단한 문자열은 puts()를 사용하는 것이 좋음. printf()보다 훨씬 가벼움) • 파일에 문자열을 출력하고 싶다. (저장하고 싶다.) • 파일에 출력하고 싶은 내용이 특정한 형식을 취하고 있는지 아닌지에 따라서 다른 함수가 사용되는데 특정한 형식을 취해야 한다면 fprintf()가 적당하며 단순히 문자열을 파일에 기록하는 것이라면 fputc()나 putc()를 사용

  10. 버퍼의 개념 • 예제 (버퍼로 인한 문제점)

  11. 버퍼의 개념 • 버퍼란? • 버퍼(buffer)는 ‘완충 물, 쿠션’이라는 개념을 가지고 있음 • 완충이라는 것은 부족한 것에 대한 보완, 보충의 의미가 있는데 컴퓨터에서는 이 완충이 바로 메모리와 하드 디스크 간의 속도 차를 완화해 주고 있음 • 컴퓨터에서의 버퍼는 임시 저장 장소를 뜻함 • 임시 저장 장소에 저장되는 내용은 문자나 문자열, 숫자 등 어느 것이나 올 수 있는데 입출력의 효율을 위해서 사용함

  12. putchar() • 예제 (단일 문자 출력)

  13. getchar() • 예제 (단일 문자 입력: 다음의 프로그램에서 문제점은?)

  14. getchar() • getchar()의 입력형태

  15. getchar() • 버퍼 경유 입출력 함수 특성처리

  16. puts() • int puts(const char *s); • 인자 : 문자열 포인터 • 리턴값 : 출력되는 문자의 길이 (일반적으로 무시) • 간이 예제 • puts(“jung jae une”); • char *imsi = “archie”; • puts(imsi); • puts(“line one”); • puts(“line two”);

  17. puts() • 포인터와 문자열

  18. gets(), fgets() • char *fgets(char *s, int size, FILE *stream); • stream으로부터 size 크기만큼 얻어 s에 저장 char *imsip; imsip = (char *)malloc(20); • 다음처럼 포인터를 사용할 수 도 있음

  19. 제 11 장 문자열 함수

  20. 목 차 • 문자열 함수 • 문자열 복사함수 • 문자열 연결함수 • 문자열 비교함수 • 문자열 탐색함수 • 문자열 변경함수 • 문자 검사함수 • 연습문제

  21. 문자열 함수 개론 • C의 문자열 함수는 다른 언어에 비해 부족함 • 함수의 이름이 함축적 임 • 사용법이 간단함

  22. 문자열 함수 종류 • strcasecmp, strncasecmp, strcat, strncat, strlcat, strchr, strrchr, strcmp, strncmp, strcpy, strncpy, strlcpy, strcspn, strspn, strdup, strlen, strpbrk, strstr, strtok, strtok_r

  23. 문자열 함수 분류

  24. 문자열 함수 분류 • str : string 문자열 함수를 총칭 • r : scan reversely 역순 • n : number of character 문자의 개수를 참조 • case : case insensitivity 대소문자를 구별하지 않음

  25. 문자열 복사함수 • char *strcpy(char *s1, const char *s2) • s2를 s1에 복사 • s2가 가리키는 문자열을 s1이 가리키는 영역에 복사 • char *strncpy(char *s1, const char *s2, size_t n) • s2를 s1에 n 문자길이만큼 복사 • s2가 가리키는 문자열을 s1이 가리키는 영역에 n 글자만큼 복사

  26. 문자열 복사함수 • 예제 (strcpy())

  27. strncpy() • 예제(strncpy())

  28. 문자열 연결함수

  29. strcat() • char *strcat(char *s1, const char *s2) • s1의 끝에 s2의 문자열을 추가 • s1이 가리키는 문자열의 끝에 널 문자를 제거하고 s1이 가리키는 문자열을 추가

  30. strncat() • char *strncat(char *s1, const char *s2, size_t n) • s1에 s2의 n 길이만큼 추가 • s2가 가리키는 주소 값부터 n 길이만큼의 문자를 s1이 가리키는 문자열의 끝에 추가

  31. sprintf() • int sprintf(char *str, const char *format, ...);

  32. 문자열 비교함수

  33. 문자열 비교함수 • int strcasecmp(const char *s1, const char *s2) • s1과 s2의 문자열을 비교하여 일치하면 0을 리턴 • s1이 가리키는 문자열과 s2가 가리키는 문자열을 비교하고 일치하면 0을 리턴 하고 아니면 양수나 음수를 리턴 • 리턴 값이 0이면 두 문자열은 일치 • 대소문자는 구별하지 않음 • int strncasecmp(const char *s1, const char *s2, size_t n) • s1과 s2의 문자열을 n 길이만큼만 비교하여 일치하면 0을 리턴 • s1이 가리키는 문자열과 s2가 가리키는 문자열을 n 길이만큼만 비교하고 일치하면 0을 리턴 하고 아니면 양수나 음수를 리턴 • 0이면 두 문자열은 일치 • 대소문자는 구별하지 않는다.

  34. 문자열 비교 함수 • int strcmp(const char *s1, const char *s2) • s1과 s2를 비교하여 일치하면 0을 리턴 • s1이 가리키는 문자열과 s2가 가리키는 문자열을 비교하고 일치하면 0을 리턴 하고 아니면 양수나 음수를 리턴 • 대소문자를 구별함

  35. 문자열 비교함수 • int strncmp(const char *s1, const char *s2, size_t n) • s2의 문자 중에서 n 길이만큼 s1과 비교하여 같으면 0을 리턴 • s2가 가리키는 문자열 중에서 n 길이만큼 s1이 가리키는 문자열과 비교하고 같으면 0을 리턴 • 대소문자를 구별함

  36. 문자열 비교함수 • int strncmp(const char *s1, const char *s2, size_t n) • s2의 문자 중에서 n 길이만큼 s1과 비교하여 같으면 0을 리턴 • s2가 가리키는 문자열 중에서 n 길이만큼 s1이 가리키는 문자열과 비교하고 같으면 0을 리턴 • 대소문자를 구별함

  37. 문자열 탐색함수

  38. 문자열 탐색함수 • char *strchr(const char *s, int c) • 문자열 s에서 문자 c가 발견되면 발견된 위치를 리턴 • s가 가리키는 문자열에서 문자 c가 발견되면 발견된 위치를 주소 값으로 리턴 • 만약 발견되지 않으면 널 포인터가 리턴 됨

  39. 문자열 탐색함수 • char *strrchr(const char *s, int c) • 문자열 s에서 문자 c가 발견된 위치를 리턴(단, 탐색은 앞이 아닌 뒤에서 함) • s가 가리키는 문자열에서 뒤쪽부터 c 문자를 탐색 (만약 발견하지 못하면 널 포인터가 리턴 됨)

  40. 문자열 탐색함수 • char *strstr(const char *s1, const char *s2) • 문자열 s1에서 문자열 s2를 찾아 일치하면 위치를 리턴 • s1이 가리키는 문자열에서 s2가 가리키는 문자열을 탐색하고 일치하는 위치의 주소 값을 리턴(만약 일치하는 문자열이 발견되지 않으면 널 포인터를 리턴함)

  41. 문자열 탐색함수 • char *strpbrk(const char *s1, const char *s2) • 문자열 s1 중에서 문자열 s2에 속해있는 어떠한 문자라도 발견되면 발견된 위치를 리턴 • s1이 가리키는 문자열 중에서 s2가 가리키는 문자열에 속해있는 어떠한 문자라도 발견되면 그 위치의 주소 값을 리턴

  42. 문자열 변경함수

  43. atoi() • 예제 (atoi())

  44. sprintf() • 예제 (sprintf())

  45. 문자 검사함수

  46. 문자 검사함수 • 예제 (소문자를 대문자로 출력)

  47. 두 문자열을 비교하고 그 결과를 숫자가 아닌 다음과 같은 문자열로 출력하시오. • 일치할 때 : 두 문자열은 같습니다. • 일치하지 않을 때 : 두 문자열은 일치하지 않습니다. • 사용자로부터 두 개의 문자열을 입력 받고 두 문자열의 순서를 바꾸어서 다른 배열에 저장한 후 저장된 배열을 출력하시오. • 입력 : archie jung • 출력 : jung archie

  48. 사용자로부터 문자열을 입력 받고 그 중에서 숫자가 아닌 것만 출력하시오. • 사용자로부터 3 라인을 입력 받고 문자열의 길이와 라인 수, 공백 수를 출력하시오. (단, isspace() 함수를 사용한다.)

  49. 사용자로부터 소수점이 있는 숫자를 입력 받고 다음과 같이 출력하도록 프로그램 하시오. (단, sprintf() 함수를 사용하시오.) 입력 : 34.25 출력 : 34.25 (소수점 이하 2 자리) 입력 : 17.9478 출력 : 17.9478 (소수점 이하 4자리)

  50. 사칙 연산을 하는 프로그램을 작성하시오. (단, 우선순위는 없으며 앞에서부터 처리) 입력 : 5 + 3 * 7 출력 : 56 // 만약 우선순위를 처리한다면 105가 출력된다. // 할 수 있다면 우선순위의 개념을 넣어보자. // 이때는 스택의 개념이 필요하다. • 10개의 정수 값을 받아 들이고 이중에서 가장 큰 수와 가장 작은 수를 출력하시오.

More Related