1. 목적
- 키보드 입력을 이해한다.
2. 문제 (점수 : 15 점)
- 키보드를 입력 받은 문자들을 기준으로 특수문자 공백문자를 제거 하고 대문자로 출력하는 프로그램을 작성하라.
- Ctrl + Z 키를 입력하면 종료 되도록 한다.
- 출력 화면
문자들을 입력하세요(마침 : Ctrl+Z) : Hello World !! 2007 Korea Univ. !@#$%
HELLOWORLD2007KOREAUNIV
^Z
Press any key to continue
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() 함수는 엔터키 치기 전까지 입력된 모든 문자를 입력 받아 버퍼에 저장하고 첫번째 문자를 꺼내 할당 받고 비우는 함수 입니다.
예를 들어 '1234'를 입력했을때 첫번째 getchar() 에서 1 을 두번째 getchar() 명령어에서는 키보드입력을 받지 않고 2 를 받으며 세번쨰 getchar() 함수에서는 3 을 ... 비워지지 전까지 getchar() 명령어는 계속 할당 받습니다. 따라서 getchar() 함수는 엔터키 치기 전까지 입력된 모든 문자를 입력 받아 버퍼에 저장하고 첫번째 문자를 꺼내 할당 받고 비우는 함수 입니다.