C语言基础(十六)通过指针来输入和获取结构体的变量值

老样子,先看代码

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

#define NLEN  30
struct namect{
    char fname[NLEN];
    char lname[NLEN];
    int letters;
};


void getinfo(struct namect *);
void makeinfo(struct namect *ptr);
void showinfo(const struct namect *ptr);

char * s_gets(char * st,int n);

int main()
{


    struct namect person;
    getinfo(&person);
    makeinfo(&person);
    showinfo(&person);

        return 0;
}

void makeinfo(struct namect *ptr)
{
    ptr->letters = strlen(ptr->fname) + strlen(ptr->fname);
}


void showinfo(const struct namect *ptr)
{
    printf("%s %s %d\n",ptr->fname,ptr->lname,ptr->letters);
}


void getinfo(struct namect * person)
{

    printf("Enter your first name: ");
    s_gets(person->fname,NLEN);
    printf("Enter your last name: ");
    s_gets(person->lname,NLEN);
    person->letters = strlen(person->fname) + strlen(person->lname);
}
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');
        if(find){
            *find='\0';
        }
        else
        while (getchar()!= '\n')
        continue;
    }   
    return ret_val;
}

这个C语言程序主要包括以下几个部分:

  1. 结构体定义:定义了一个结构体 namect,其中包含了用户的名字和姓氏以及字母的个数。结构体的成员包括 fname(存储名字的数组)、lname(存储姓氏的数组)和 letters(存储字母数量的整型变量)。

  2. 函数定义

    • getinfo(struct namect * person):该函数用于获取用户输入的名字信息。首先提示用户输入名字和姓氏,然后使用 s_gets 函数安全地获取用户输入的字符串,并计算名字中字母的总数。

    • makeinfo(struct namect *ptr):该函数用于计算名字中字母的总数。在这个函数中,通过使用 strlen 函数分别获取 fnamelname 的字符数量,然后将它们相加,并将结果存储在结构体变量的 letters 成员中。

    • showinfo(const struct namect *ptr):该函数用于展示用户输入的名字、姓氏以及字母的总数。通过打印结构体变量中的 fnamelnameletters 成员来显示这些信息。

    • s_gets(char * st,int n):该函数用于安全地获取用户输入的字符串。它会使用 fgets 函数来读取用户输入的字符串,并在需要时去掉换行符。

  3. 主函数

    • 在 main 函数中,首先创建了一个 namect 结构体变量 person
    • 然后调用 getinfo(&person) 函数来获取用户输入的名字信息。
    • 再调用 makeinfo(&person) 函数来计算名字中字母的总数。
    • 最后调用 showinfo(&person) 函数来展示用户输入的名字、姓氏以及字母的总数。

其实就是通过定义形参,然后取定义好的结构体变量的地址传递进函数,然后在函数中通过指针变量所导入的地址的值进行操作。从而达到通过指针来传递地址的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值