easy software

C언어 문자열 함수 fgets() 을 이용해보자 본문

C언어/변수와 함수

C언어 문자열 함수 fgets() 을 이용해보자

JAVA 웹개발자 2015. 2. 3. 19:56

fgets() 함수는 문자열 입력함수입니다.

 

구조는 char* fgets(char* s, int n, FILE* stream); 입니다.

 

첫번째 인자는 문자열을 포인터가 가리키게 하고,

 

두번째 인자는 최대 얼마의 길이까지 입력받을 지를 정해주게 됩니다.

 

세번째 인자는 입력받는 개체가 어디인지를 알려주는 것으로써

 

표준 입력 스트림인 stdin을 전달하게 되면, 키보드로부터 입력을 받게 됩니다.

 

 

 

그리고 간단하게 문자열의 길이를 알려주는 함수도 알아볼까요?

 

string.h 에 선언되어있는 strlen이란 함수입니다.

 

strlen(char* s)의 형식으로 선언되어있기 때문에, 문자열을 전달하면 길이를 반환하게 됩니다.

 

 

 

그럼 이 둘을 적절하게 응용해서 간단한 예제를 하나 해보도록 하겠습니다.

 

사용자로부터 적절한 문자열을 입력받고, 그 안에 존재하는 숫자들의 총 합을 계산하는 문제입니다.

 

사용자가 입력한 문자열이 "vc89q4s3" 이면 24가 출력되어야 하는 거죠.

 

 

#include <stdio.h>
#include <string.h>

 

//숫자만 추출하여 더해주는 함수
int sum(char ch[]){

     int sum = 0;
     int len = strlen(ch);

 

     for (int i = 0; i < len; i++)
          //0은 아스키코드값 48, 9는 아스키코드값 57
          if (ch[i] > 47 && ch[i] < 58)
               sum += ch[i] - 48;//아스키코드값 - 48 = 실제 숫자

 

     return sum;
}

 

int main(void){

 

     char input[20];
     int result;

 

     //사용자로부터 값을 입력받음
     fgets(input, sizeof(input), stdin);

 

     result = sum(input);
     printf("%d \n", result);

 

     return 0;
}

 

 

main에서 fgets함수를 이용하여 문자열을 입력받고 있습니다.

 

두번째 인자로 sizeof(input)을 주어 최대 20길이의 문자열을 입력받을 수 있게 해주었고,

 

stdin을 세번째 인자로 전달하여 키보드로부터 입력을 받도록 했습니다.

 

sum함수에서는 반복문안에 조건문에서 아스키코드를 이용하여

 

숫자인지 아닌지를 판별하고 있습니다. 숫자일 경우 -48을하여 실제숫자를 추출합니다.

Comments