KPlay의 코딩 그리고 잡동사니

우리는 지금까지 문자열 입출력함수로 scanf 함수와 printf함수를 써왔습니다

그러나 scanf함수는 공백을 기준으로 문자열을 구분하기때문에 공백을 굳이 입력하고싶다면

언더바(_)로 써줘야 하는 번거로움이 있었습니다.

이번에 소개할 함수들은 C언어의 대표적인 문자, 문자열 입력 함수들입니다.

문자 출력 함수

int putchar(int c); // 문자를 출력버퍼에 하나씩 옮기고 기본 출력도구인 모니터에 출력합니다.

버퍼에 대한 개념은 나중에 설명합니다

int fputc(int c, FILE * stream);

// 문자를 출력버퍼에로 하나씩 옮기나, 출력을 모니터로 할것인지 파일로 할것인지 혹은 다른것으로 할것인지를 지정 할 수 있습니다.

// 스트림이라는 것 또한 버퍼를 설명할때 같이 나옵니다.

문자 입력 함수

int getchar(void);

// 키보드로부터 입력버퍼로 옮겨진 입력버퍼의 문자를 하나씩 가져옵니다.

함수호출 실패 시 혹은, Ctrl+z키 입력시 EOF(-1) 반환

// 보통 ch = getchar(); 형식으로 문자하나를 입력받는데 쓰입니다.

int fgetc(FILE * stream); // "파일에 끝에 도달하거나" 함수호출 실패 시, Ctrl+z키 입력시 EOF(-1, End of file) 반환

//여기서 EOF라는것은 End of file의 약자로 함수호출이 실패됐거나 파일에 끝에 도달하면 출력되는 값입니다

문자열 출력 함수

int puts(const char * s); // 성공 시 음수가 아닌값을, 실패 시 EOF 반환

// 특이하게도 puts함수는 개행문자인 \n을 넣어주지 않아도 자동으로 한번 개행을 시켜줍니다.

int fputs(const char *s, FILE * stream);

// puts와 다르게 개행문자 출력안해줌, 성공 시 음수가 아닌값을, 실패 시 EOF 반환

문자열 입력 함수

char * gets(char * s); // 함수호출 실패 시 NULL 포인터 반환

char * fgets(char *s, int n, FILE * stream);

// 파일의 끝에 도달하거나 함수호출 실패 시 NULL 포인터 반환(NULL이 들어있는 포인터, 아무것도 가리키지 않는다는뜻)

// fgets 함수는 추가로 int n 인자를 하나 더 입력받는데 이것은 NULL문자를 포함한 문자열의 길이 정보이며

gets함수의 문제점 때문에 생겼는데 gets함수는 이것이 없기때문에 입력받은 배열의 길이보다 많이 입력해도 그대로 다 받아들이는 문제점이 있습니다.

fgets함수에 준 배열의 길이보다 많이 입력하면 나머지는 버퍼에 남아있게 됩니다.

fgets함수는 공백을 기준으로 문자열을 구분하는 scanf함수와 다르게 엔터(개행)을 기준으로 문자열을 구분한다

더해서 엔터도 문자열의 일부로 받아들여서 엔터를 입력하면 개행도 한번 출력된다

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band