1. 목적
  - 키보드 입력을 이해한다.

2. 문제 (점수 : 15 점)
  - 키보드를 입력 받은 문자들을 기준으로 특수문자 공백문자를 제거 하고 대문자로 출력하는 프로그램을 작성하라.
  - Ctrl + Z 키를 입력하면 종료 되도록 한다.
  - 출력 화면

문자들을 입력하세요(마침 : Ctrl+Z) : Hello World !! 2007 Korea Univ. !@#$%
HELLOWORLD2007KOREAUNIV
^Z
Press any key to continue

3. 이해
  - 키보드 입력할 줄 아는가?
  - 글자 속성을 이해하고 원하는 방식으로 출력할 줄 아는가?

4. 코드

#include <stdio.h>
#include <ctype.h>

int main()
{
 char in = 0;
 printf("문자들을 입력하세요(마침 : Ctrl+Z) : ");

    while( (in = getchar()) != EOF)
    {
  if(isalnum(in)) putchar(toupper(in));
  if(in == '\n') putchar('\n');

 }
 return 0;
}

5. 해설
  - 키를 입력받은 값을 엔터키가 나오기 전까지는 출력이 되지 않습니다.
  - 엔터키는 isalnum 함수에서 걸러져서 출력이 되지 않기 때문에 따로 검색하여 출력하게 합니다.

getchar 에서 여러값을 입력할 때 버퍼를 비우지 않으면 앞에 한자만 꺼내 써지고 다음 getchar() 명령시 키보드에 입력된 버퍼중 다음 글자를 읽어서 그냥 들어 저장이 됩니다.

 예를 들어 '1234'를 입력했을때 첫번째 getchar() 에서 1 을 두번째 getchar() 명령어에서는 키보드입력을 받지 않고 2 를 받으며 세번쨰 getchar() 함수에서는 3 을 ... 비워지지 전까지 getchar() 명령어는 계속 할당 받습니다. 따라서 getchar() 함수는 엔터키 치기 전까지 입력된 모든 문자를 입력 받아 버퍼에 저장하고 첫번째 문자를 꺼내 할당 받고 비우는 함수 입니다.

6. 참고
  - 네이버 지식인
  - 유사 문제

Posted by 카켈