본문 바로가기

primer plus

[c primer plus] chapter08 문자 입출력과 입력 유효성 검사

단일 문자 입출력

getchar()  /  putchar() 는 한 번에 한 문자씩 입출력을 수행한다.

 

버퍼

문자를 묶어서 전달하는 것이 하나씩 전달하는 것보다 시간을 적게 소모한다

잘못 타이핑했을 떼 키보드 기능을 사용하여 실수를 고칠 수 있다.

 

 

파일(file)

정보가 저장되어 있는 메모리의 영역이다.

사용자가 작성한 c 프로그램은 파일에 저장된다.

사용자의 c 프로그램을 컴파일하는 데 사용되는 프로그램들도 파일에 저장되어 있다.

 

저수준 입출력(low-level I/O)

어떤 수준에서는 운영체제가 제공하는 기본적인 파일 도구들을 사용하여 파일들을 처리할 수 있다.

 

표준 입출력 패키지(standard I/O package)

파일들을 처리하는 입출력 함수들의 표준 집합과 표준 모델을 만드는 것이 포함된다.

 

스트림(stream)

실제의 입력이나 출력이 맵핑된(mapped) 데이터의 이상화된 흐름이다.

 

파일의 끝을 탐지하는 방법

끝을 표시하는 특별한 문자를 파일 안에 집어넣는 것이다.

운영체제가 파일의 크기에 대한 정보를 저장하는 것이다.

 

파일의 끝에 도달했을 때 getchar() 함수가 특별한 값(EOF(end of file))을 리턴하게 함으로써 다양한 방법들을 처리한다.

 

stdio.h에 있는 #defile 지시자가 기호 표현 EOF를 사용할 수 있도록 허용하기 때문에, EOF의 실제값에 대해서 신경 쓰지 않아도 된다.

 

stdin 스트림

표준 입출력 패키지를 사용하는 프로그램은 입력의 소스를 표준 입력에서 찾는다.

 

입력 리디렉션

echo_eof.c 프로그램을 컴파일하여 그것의 실행파일을 echo_eof라는 이름으로 만들었다.

words라는 텍스트 파일을 대상으로 하여 이 프로그램을 사용하려한다.

echo_eof < words   (< 기호가 Unix, Linx, DOS/Windows의 리디렉션 연산자)

words 파일을 stdin 스트림에 연결하여, 파일의 내용이 echo_eof 프로그램 안으로 들어가게 한다.

 

출력 리디렉션

echo_eof 가 키보드 입력을  mywords 라는 파일로 보내게 하려한다.

echo_eof > mywords  (> 는 제 2의 리디렉션 연산자)

mywords 라는 새로운 파일을 만들고 echo_eof 의 출력을 그 파일로 리디렉션한다.

 

결합 리디렉션 

mywords 파일의 사본을 만들어 그것을 savewords라고 부르려고 한다.

echo_eof < mywords >savewords   

echo_eof > savewords < mywords

리디렉션 연산의 순서는 상관없다.

 

메뉴 선택 방식

사용자가 지시대로 따를 때 프로그램이 부드럽게 넘어가게 만드는 것

사용자가 지시대로 따르지 않을 때에도 프로그램이 부드럽게 넘어가게 만드는 것

get_char() 함수

사용자에게 선택사항들을 보여 준다

응답을 얻는다

응답을 받아들일 수 없는 동안 

다시 응답하도록 안내한다

응답을 얻는다

 

수치와 문자의 혼합 입력

get_choice() 의 다음 번 호출에서 get_first() 가 개행문자를 첫 문자로 리턴하고, 원하지 않는 동작을 일으키는 결과를 가져온다.

해결 1) 다음에 만나는 문자가 아니라 다음에 처음으로 만나는 화이트스페이스가 아닌 문자를 리턴하도록 get_first() 함수를 다시 작성하는것

해결 2) count() 함수가 개행 문자를 깔끔하게 처리하는 것