웹사이트 검색

C 프로그래밍 자습서 5부 - 문자 변수


이전 두 튜토리얼에서 변수가 메모리를 차지하는 방법을 포함하여 변수의 기본 사항에 대해 논의했습니다. 그러나 우리는 주로 정수와 실수에 집중했습니다. 이 자습서에서는 문자(또는 char 유형 변수)에 대해 설명합니다.

char 유형의 변수는 메모리에서 1바이트(또는 8비트)를 차지합니다. 앞서 int와 float의 경우에 언급했듯이 다음 C 프로그램을 사용하여 시스템에서 문자가 차지하는 메모리 양을 확인할 수 있습니다.

#include <stdio.h>

int main (void)
{
printf("\n sizeof char in bytes is %u", sizeof(char));

return 0;
}

내 시스템에서 출력은 다음과 같습니다.

 sizeof char in bytes is 1                                                                                               

이제 사용자의 입력으로 문자를 받아들이는 방법과 출력에 인쇄하는 방법에 대한 질문이 있습니다. 음, 입력에서 문자를 받아들이기 위해 getchar라는 전용 함수가 있습니다. 마찬가지로 개별 문자를 인쇄하려면 putchar가 있습니다. 다음 코드는 이러한 함수의 작동 방식에 대한 더 나은 아이디어를 제공합니다.

#include <stdio.h>

int main (void)
{
int c;
c = getchar();
putchar(c);

return 0;
}

위의 코드는 실행될 때 먼저 사용자가 문자를 입력하기를 기다립니다. 그런 다음 터미널에 동일한 문자를 출력합니다.

getchar가 반환하는 값이 정수에 저장된다는 사실이 약간 놀라울 수 있지만 실제로는 그렇습니다(함수가 int를 반환함). 그러나 getchar에서 반환된 값을 문자와 항상 비교할 수 있습니다. 예를 들면 다음과 같습니다.

#include <stdio.h>

int main (void)
{
int c;
c = getchar();
if(c == 'a')
{
printf("matched");
}
else
{
printf ("doesn't match");
}
return 0;
}

따라서 여기에서 사용자가 a를 입력하면 프로그램은 일치하는 출력을 인쇄합니다. 그렇지 않으면 일치하지 않는 것을 볼 수 있습니다.

아, 그리고 예, 우리가 if와 else 문을 사용한 것은 이번이 처음입니다. 지금까지 이해하셨겠지만 if를 사용하면 조건이 참인 경우 일련의 명령문을 실행할 수 있습니다. if 조건이 실패하면 코드 실행이 자동으로 else 블록으로 들어갑니다. else 문 없이 if 문을 사용할 수 있지만 그 반대의 경우는 유효하지 않습니다.

이제 getchar 및 putchar로 돌아가서 이러한 함수를 사용하여 실제 문제를 해결하는 방법에 대해 빠르게 논의하겠습니다. 사용자가 프로그램에 입력으로 제공한 줄 수를 세고 싶다고 가정하면 다음과 같은 방법으로 계산할 수 있습니다.

#include <stdio.h>

int main (void)
{
int c =0, counter=0;
c = getchar();
while(c != EOF)
{
c = getchar();
if(c == '\n')
counter = counter+1;
}
printf("\n The input contains %d lines \n", counter+1);
return 0;
}

위의 프로그램을 이해하기 위해서는 먼저 EOF가 무엇인지 알아야 합니다. EOF는 End Of File의 약자입니다. 사용자가 입력을 완료했음을 나타내는 데 사용됩니다.

따라서 입력을 제공하는 사용자로서 프로세스를 완료하면 ctrl+d(몇 번)를 누릅니다. 우리가 한 것처럼 프로그램에서 확인할 수 있는 EOF와 동등한 값을 생성하는 이 작업입니다.

프로그램으로 돌아가서 먼저 입력의 첫 번째 문자를 확인하여 EOF인지 확인합니다. 그렇지 않은 경우 while 루프에 들어가 EOF를 얻을 때까지 각 문자를 계속 확인합니다. 이 전체 과정에서 개행 문자(\n) 카운터 변수를 증가시킵니다.

EOF가 감지되면 while 루프가 종료되고 카운터 값보다 하나 더 많은 라인 수를 인쇄합니다.

printf 함수에서 카운터에 1을 추가하는 이유는 라인 수가 항상 개행 문자 수(또는 일반 용어로 사용자가 Enter 키를 누른 횟수)보다 하나 더 많기 때문입니다. 물론 이것은 사용자가 Enter 키를 누를 때마다 일부 텍스트도 입력한다고 가정합니다.

따라서 이 프로그램에 다음과 같은 입력을 제공하면

Hello 
Welcome to HowtoForge
Thanks  

출력은 다음과 같습니다.

The input contains 3 lines

우리 코드는 사용자가 최소한 한 줄을 제공한다고 가정합니다. 몇 가지 코너 케이스는 일을 단순하게 유지하기 위해 의도적으로 처리하지 않습니다. 하나는 사용자가 입력에 다른 문자를 제공하지 않고 EOF를 제공하는 경우이고, 다른 하나는 개행 문자를 제공하지 않고 행을 제공하는 경우입니다.

줄 수를 계산하는 것은 하나의 예일 뿐입니다. 이 코드를 확장하여 사용자가 입력한 총 단어 수를 계산할 수도 있습니다. 이것을 과제로 생각하고 직접 코딩해 보세요. 힌트로 줄 바꿈(\n) 줄 수를 계산합니다.

이 자습서에서는 문자를 사용하는 방법, 문자를 입력으로 받아들이고 출력으로 인쇄하는 방법을 포함하여 문자에 대해 조금 더 논의했습니다. 또한 getchar 함수가 입력 라인 수를 계산하는 데 도움이 되는 예에 대해서도 논의했습니다. 마지막 단락에서 내가 준 과제를 시도해보고 의문이나 질문이 있으면 알려주세요.