본문 바로가기
TIL/따배씨

문자 입출력과 입력 유효성 검증 (2021-01-12)

by Dev_Dank 2021. 1. 12.

8.1 입출력 버퍼

버퍼(임시 메모리 저장소)라는것은 입력과 출력을 한번에 모아서 하면 효율이 좋기때문에 사용하는것

기본적으로는 A하나 입력받으면 바로 A를 출력하고 그다음 B를 입력받으면 바로 B를출력하고.... 이게 기본.
버퍼가 있는경우 

입출력은 기본적으로 느리기 때문에 한개씩 따로따로 하기보다는 한번에 버퍼에 모아서 통째로 전송하는 것이 효율적이다.

버퍼 내용이 통째로 전달 되는 때는 이하의 2가지 
1. 버퍼가 다 찼을때 -> 더 받을수 없어서 보내버림 
2. \n 이 들어왔을때 

8.2 파일의 끝(End Of File)

지금 까지 강의에서 getchar를 쓸때는 주로 int c 의 형태로 signed int 변수를 선언후 그 변수에 getchar()로 입력받은값을 넘겨주었다.
(getchar()는 이전강의에서 설명되었듯 문자를 입력받아 int로 리턴한다.)

한가지 의문점은 아스키코드에는 음수가 없는데 계속 signed int를 사용한것 

이유는?

파일의 끝 EOF가 -1 로 stdio.h에 정의 되어있기 때문이다.

콘솔창에서 ctrl+z를 입력하고 엔터를 치면 -1이 반환되며 -1이 곧 EOF이기  때문에 프로그램이 종료 된다.

 

EOF를 우클릭하여 definition으로 들어가보면 실제로 -1로 정의 되어있는 것을 볼 수 있다.

8.3 입출력 방향 재지정

cmd 창에서 파일을 생성하는것과 복사 옮기기등의 기능을 실습했다. 자세한 내용은 강의 참조

8.4 사용자 인터페이스는 친절하게

getchar에 대한 더 명확한 이해가 필요한 강의다.
getchar는 입력 버퍼에서 딱 한 문자만 가져와서 입력 버퍼를 비우고 이를 반환하는 역할을 한다.

인프런 질문중에 좋은 질답이 있어 가져온다. 

나만 이해가 안되는것은 아닌거 같다....

8.5 숫자와 문자를 섞어서 입력받기

while (getchar() != '\n')
    continue;

구문을 이용해서 버퍼를 지워줘야하는 것을 잊지말자. getchar()는 콘솔에 입력을 위해서 친 enter 까지도 '\n'으로 인식해버려서 버퍼에 '\n'이 있게 된다. 

8.6 입력 확인하기

지난 강의에서 scanf()는 형식지정자로 지정한 정확한 자료형이 들어오면 입력의 갯수를 리턴한다고 했다. 

만약 정확하지않은 자료가 입력될경우 입력을 받지못해 0이 출력된다고도 했다. 

한가지 더 기억해둘 점은 정확하지 않은 자료가 입력 될경우 입력한 자료는 버퍼에 남아있다는 것이다. 따라서 

while (getchar() != '\n') 
    continue;

를 활용 해줘서 버퍼를 비워줘야한다. 

이하의 예시를 참조 하자. 

8.7 입력 스트림과 숫자

scanf()의 자세한 작동법에 대한 설명 강의다 자세한 내용은 강의 참조.

8.9 텍스트 파일 읽기

전반적으로 포인터 변수와 같은 아직 설명 되지 않은 부분이 포함되어 정리가 어렵다. 일단 넘어가고 이후에 파일읽어올일이있다면 다시 참고하도록 하자

'TIL > 따배씨' 카테고리의 다른 글

배열과 포인터(2021-01-15 ~ 2021-01-17)  (0) 2021.01.15
함수 (2021-01-13 ~ 2021-01-14)  (0) 2021.01.13
분기 (2021-01-11)  (0) 2021.01.11
반복문(2021-01-08 ~ 2021-01-09)  (0) 2021.01.08
연산자, 표현식, 문장 (2021-01-07)  (0) 2021.01.07

댓글