몽상실현개발주의

[따배씨] 14.8 구조체와 함수 연습문제 본문

Language/C

[따배씨] 14.8 구조체와 함수 연습문제

migrationArc 2021. 6. 22. 23:04

[따배씨] 14.8 구조체와 함수 연습문제

따배씨 - 따라하며 배우는 C언어

14강 구조체_1

14.8 구조체와 함수 연습문제

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

#define NLEN 30

struct name_count
{
    char first[NLEN];
    char last[NLEN];
    int num;
};

void receive_input(struct name_count*);
void count_charaters(struct name_count*);
void show_result(const struct name_count*);
char* s_gets(char* st, int n);

int main()
{
    struct name_count user_name;
    
    receive_input(&user_name);
    count_charaters(&user_name);
    show_result(&user_name);
    
    return 0;
}

void receive_input(struct name_count* user_name)
{
    int flag;
    
    printf("Input your first name :\n>> ");
    
//    s_gets(user_name->first, NLEN);
    flag = scanf("%[^\n]%*c", user_name->first); // ^ : cap operator
    // scanf 로 s_gets 를 대체
    // "%[^\n]%*c" 줄바꿈 기호 하나를 무시하고 입력 받음
    
    if (flag != 1)
        printf("Wrong input");
    
    printf("Input your last name :\n>> ");
//    s_gets(user_name->last, NLEN);
    flag = scanf("%[^\n]%*c", user_name->last);
    
    if (flag != 1)
        printf("Wrong input");
}


void count_charaters(struct name_count* user_name)
{
    user_name->num = (int)(strlen(user_name->first) + strlen(user_name->last));
}


void show_result(const struct name_count* user_name)
{
    const char* formmated = "Hi, %s %s.\nYour name has %d characters.\n";
    printf(formmated, user_name->first, user_name->last, user_name->num);
}

char* s_gets(char* st, int n)
{
    char* ret_val;
    char* find;
    
    ret_val = fgets(st, n, stdin);
    
    if (ret_val)
    {
        find = strchr(st, '\n');    // look for newline
        if (find)                   // if the address is not NULL
            * find = '\0';          // place a null characgter there
        else
            while(getchar() != '\n')
                continue;           // dispose of rest of line
    }
    
    return ret_val;
}
flag = scanf("%[^\n]%*c", user_name->first); //
  • scanf 로 s_gets 를 대체
    • [^\n]%*c 줄바꿈 기호 하나를 무시하고 입력 받음
    • ^ : cap operator

 

 

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

#define NLEN 30

struct name_count
{
    char first[NLEN];
    char last[NLEN];
    int num;
};

struct name_count receive_input();
struct name_count count_characters(struct name_count);
void show_result (const struct name_count);
char* s_gets(char * st, int n);

int main()
{
    struct name_count user_name;
    
    user_name = receive_input();
    user_name = count_characters(user_name);
    show_result(user_name);
    
    return 0;
}

struct name_count receive_input()
{
    struct name_count nc;
    
    printf("Input your first name\n>>");
    s_gets(nc.first, NLEN);
    
    printf("Input your last name:\n>>");
    s_gets(nc.last, NLEN);
    
    return nc;
}
struct name_count count_characters(struct name_count nc)
{
    nc.num = (int)(strlen(nc.first) + strlen(nc.last));
    
    return nc;
}
void show_result (const struct name_count nc)
{
    printf("Hi, %s %s. Your name contains %d characters.\n", nc.first, nc.last, nc.num);
}

char* s_gets(char* st, int n)
{
    char* ret_val;
    char* find;
    
    ret_val = fgets(st, n, stdin);
    
    if (ret_val)
    {
        find = strchr(st, '\n');    // look for newline
        if (find)                   // if the address is not NULL
            * find = '\0';          // place a null characgter there
        else
            while(getchar() != '\n')
                continue;           // dispose of rest of line
    }
    
    return ret_val;
}

 

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

 

 

Comments