2011. 2. 28. 19:23
문자 단위 입출력 함수
1) 문자출력함수
 -하나의 문자를 출력할 때 일반적으로 사용하는 함수는 putchar함수와 fputc함수이다.
 int putchar(int c);
 int fputc(int c, FILE* stream);
◇putchar함수 : 함수 호출 시 인자로 전달된 문자를 '표준 출력 스트림(stdout)'으로 출력해주는 역할을 하는 함수. 즉 모니터에다가 하나의 문자를 출력해 주는 함수

◇fputc함수 : 함수 호출 시 인자로 전달된 문자를 '표준 출력 스트림(stdout)'으로 출력해주는 역할을 하는 함수. 즉 모니터에다가 하나의 문자를 출력해 주는 함수 +.. 문자를 출력할 스트림을 지정할 수 있다!(모니터뿐 아니라 파일에도 문자를 출력(저장)할 수 있는 함수)
fputc 함수의 두 번째 인자 stream은 문자를 출력할 스트림을 지정하기 위해서 사용된다. 따라서 이 인자에다가 표준 출력 스트림을 의미하는 'stdout'을 인자로 전달하게 되면 putchar함수와 완전히 동일한 함수가 된다. fputc함수는 파일 입.출력에서 주로 사용하게 된다.


※참고 : 오류 발생 시 반환되는 EOF의 실제 값을 -1이다.


2)문자 입력 함수
하나의 문자를 입력받을 때 일반적으로 사용하는 함수는 getchar함수와 fgetc함수이다.
 int getchar(void);
 int fgetc(FILE* stream);

◇getchar 함수: '표준 입력 스트림(stdin)'으로부터 한 문자를 입력받아서 반환해 주는 함수이다. 따라서 키보드로부터 하나의 문자를 입력받는 함수라고 할 수 있다.

◇fgetc함수:'표준 입력 스트림(stdin)'으로부터 한 문자를 입력받아서 반환해 주는 함수이다. 따라서 키보드로부터 하나의 문자를 입력받는 함수라고 할 수 있다.+.. 문자를 입력받을 스트림을 지정할 수 있다는 특징.(fgetc함수를 이용하면 키보드뿐만 아니라 파일로부터도 데이터를 입력받을 수 있다.)


#include <stdio.h>

int main()
{
 char ch=0;
 while(ch != 'q')
 {
  ch=getchar();    //fgetc(stdin)와 같다.
  putchar(ch);     //fputc(ch, stdout)와 같다.
 }

 return 0;
}



3)EOF에 대해서...
 오류 발생 혹은 파일의 끝에 도달했을 경우 EOF를 리턴.
 EOF가 실제로 지니고 있는 값을 -1이다.
 오류발생시 반환 + (fgetc나 getchar 함수가 파일의 끝에 도달하는 경우에도 EOF가 반환)
 getchar : 키보드로부터 Ctrl-Z키를 입력하는 경우에 EOF를 반환

 #include <stdio.h>

int main()
{
 char ch=0;
 while(ch != EOF)
 {
  ch=getchar();
  putchar(ch);
 }
 printf("program 종료 \n");

 return 0;
}



문자열 단위 입.출력함수
1)문자열 출력 함수
하나의 문자열을 출력할 때 일반적으로 사용하는 함수는 puts 함수와 fputs함수이다.
 int puts(const char* s);
 int fputs(const char* s, FILE* stream);
puts 함수: 문자열을 표준 출력 스트림(stdout)으로 출력하기 위해 사용하는 함수이다. 인자로 전달되는 포인터는 문자열을 가리키고 있어야 한다.
문자열을 출력한 다음에 자동으로 줄을 바꿔준다.

fputs함수 : 문자열을 표준 출력 스트림(stdout)으로 출력하기 위해 사용하는 함수이다. 인자로 전달되는 포인터는 문자열을 가리키고 있어야 한다. +.. 문자열을 출력할 스트림을 선택할 수 있다.
문자열을 출력한 다음에 자동으로 줄을 바꿔주지 않는다.

 #include <stdio.h>

int main()
{
 fputs("fputs 함수에 의한 출력, ", stdout);
 fputs("I Love Linux ", stdout);

 fputs("\n", stdout); //한 줄 건너 뛰기 위해서

 puts("fputs 함수에 의한 출력, ");
 puts("I Love Linux ");
}
 



2) 문자열 입력 함수
하나의 문자열을 입력받을 때 일반적으로 사용하는 함수는 gets함수와 fgets함수이다.
 char* gets(char* s);
 char* fgets(char* s, int n, FILE* stream);
◇gets 함수: 문자열을 입력받는 함수이다. 우선 입력받을 문자열을 저장하기 위한 배열은 선언한 다음, 배열의 시작 주소(배열이름이 배열의 시작주소이다)를 인자로 전달하면서 gets 함수를 호출하게 되면 표준 입력 스트림(키보드)로부터 데이터를 입력받는다.
(하지만 이 함수는 자제해야 함. 미리 할당해 놓은 배열의 크기보다도 큰 길이의 문자열이 들어오게 되면 배열의 Overflow가 발생)

◇fgets함수 :gets함수의 잠재적 위험성 때문에 실제 프로그램에서는 fgets함수만을 사용. fgets함수의 두번째 인자 n은 입력받을 수 있는 최대 문자열의 길이를 나타낸다. 따라서 문자열을 입력받을 배열의 길이를 인자로 전달하면, 그 이상의 문자를 읽어들이는 일은 발생하지 않는다. 마지막으로 세 번째 인자 stream은 입력을 받을 스트림을 지정하기 위해 사용된다.

 #include <stdio.h>

int main()
{
 char str[10];

 fputs("문자열을 입력 하세요: ", stdout);
 fgets(str, sizeof(str), stdin);

 fputs("입력된 문자열: ", stdout);
 fputs(str, stdout);

 return 0;
}
 

※주의 : 배열의 길이가 10이기 때문에 fgets함수 호출시 두 번째 인자(n)에도 10을 전달하였음에도 불구하고 총 9개의 문자가 입력된다. 이는 fgets함수가 문자열을 입력받는 함수이기 때문이다. C에서 문자열이 되기 위한 기본조건은 끝에 반드시 NULL 문자가 들어가야 한다.
(즉 fgets 함수는 입력받을 수 있는 최대 문자열의 길이 n을 초과하는 문자열이 입력되는 경우에는 n-1개 까지의 문자만 입력을 받고, 마지막에 NULL 문자를 삽입해 준다.)


'Language > C언어' 카테고리의 다른 글

열거형(enum) 자료형  (0) 2011.03.01
문자열 처리함수  (0) 2011.03.01
배열포인터  (0) 2011.02.27
포인터와 const키워드  (0) 2011.02.26
scanf 함수 호출 시 &를 붙이는 이유  (0) 2011.02.26
Posted by Triany