프로그램의 사용자가 키보드로 한 줄을 입력할 때 입력을 끝내려면 Enter를 누르면 됩니다. 그런데 개행 문자 또한 하나의 입력 데이터로 쓴다면 입력을 종료하는 별도의 신호가 필요합니다. 이때 scanf 함수의 반환값을 사용합니다.
scanf 함수는 키보드로 Ctrl + Z를 누르면 -1을 반환합니다. 운영체제에 따라 키보드 입력 방식이 달라질 수 있는데 Ctrl + Z를 누르고 Enter를 누른 후에 Ctrl + Z를 한 번 더 입력해야 -1이 반환될 수 있습니다. 또한 유닉스나 리눅스 시스템에서는 Ctrl +D를 사용합니다. 결국 scanf 함수가 -1을 반환하기 전까지 반복 입력하면 개행 문자를 포함한 모든 문자를 데이터로 사용할 수 있습니다.
// 입력 문자의 아스키 코드 값을 출력하는 프로그램
#include <stdio.h>
int main(void)
{
int res; // scanf함수의 반환값을 저장할 변수
char ch; // 문자를 입력할 변수
while (1)
{
res = scanf("%c", &ch);
if (res == -1 ) break;
printf("%d ", ch);
}
return 0;
}
scanf 함수는 기본적으로 입력한 값의 개수를 반환합니다. 그러나 Ctrl 와 Z를 동시에 누르면 -1을 반환합니다. 따라서 반환값을 조건식에 사용하면 Ctrl + Z를 누를 때까지 입력하는 모든 문자의 아스키 코드 값을 출력할 수 있습니다.
실행결과는 입력과 출력이 Enter를 기준으로 반복됩니다. 첫 번째 행의 입력은 두 번째 행에서 아스키 코드 값을 출력하고 새로운 입력을 기다립니다. 입력한 데이터는 Enter를 누르는 순간 버퍼로 저장되고 반복문이 수행되면서 버퍼의 문자를 하나씩 가져다 아스키 코드 값을 출력합니다. 버퍼의 데이터를 모두 처리하면 다시 키보드로부터 새로운 데이터를 입력받기 위해 대기 상태가 됩니다. 두 번째 행의 입력도 같습니다. 마지막으로 Ctrl + Z를 누르면 scanf 함수는 -1을 반환하고 if문의 조건식이 참이 되어 반복문을 종료합니다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[C 언어] 입력 버퍼 지우기 (0) | 2022.12.09 |
---|---|
[C 언어] getchar 함수를 사용한 문자열 입력 (1) | 2022.12.09 |
[C 언어] scanf 함수가 문자를 입력하는 과정 (0) | 2022.12.09 |
[C 언어] getchar 함수와 putchar 함수 (0) | 2022.12.09 |
[C 언어] scanf 함수를 사용한 문자 입력 (0) | 2022.12.09 |