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

news2024/9/25 19:18:44

老样子,先看代码

#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) 函数来展示用户输入的名字、姓氏以及字母的总数。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes的Namespace使用

在 Kubernetes 中&#xff0c;命名空间提供了一种用于隔离单个集群中的资源组的机制。资源名称在命名空间内必须是唯一的&#xff0c;但不能跨命名空间。基于命名空间的作用域仅适用于命名空间物体 &#xff08;例如部署、服务等&#xff09;而不是集群范围的对象&#xff08;例…

牛客周赛 Round 37VP(DEF)

D.思维题&#xff1a; 若按照顺序发现很难入手&#xff0c;于是我们不妨先小紫&#xff0c;再让小红反悔即可 假设为cabababbabazbc&#xff0c;如果直接小紫&#xff0c;那么它一定以a开头&#xff0c;于是小红可以先把首尾的a去掉&#xff0c;即czbc,此时可以得到bc,于是小红…

19---时钟电路设计

视频链接 时钟硬件电路设计01_哔哩哔哩_bilibili 时钟电路设计 晶振是数字电路的心脏&#xff0c;数字电路需要一个稳定的工作时钟信号&#xff0c;时钟电路至关重要&#xff01; 1、晶振概述 晶振一般指晶体振荡器。晶体振荡器是指从一块石英晶体上按一定方位角切下薄片&…

基于stable diffusion的IP海报生成

【AIGC】只要10秒&#xff0c;AI生成IP海报&#xff0c;解放双手&#xff01;&#xff01;&#xff01;在AIGC市场发展的趋势下&#xff0c;如何帮助设计工作者解放双手。本文将从图像生成方向切入&#xff0c;帮助大家体系化的学习Stable diffusion的使用&#xff0c;完成自有…

sonar接入maven项目

1、介绍 sonar是一款静态代码质量分析工具&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;而且能够集成在IDE、Jenkins、Git等服务中&#xff0c;方便随时查看代码质量分析报告。他有如下特性 (1) 检查代码是否遵循编程标准&#xff1a;如命…

【回归预测】基于DBO-BP(蜣螂优化算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#68】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. BP神经网络2. 蜣螂优化算法3. DBO-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. BP神…

[云] vmware: host: net: Net.CoaleseDefaultOn

https://communities.vmware.com/t5/Storage-Performance/Advanced-Networking-Performance-Options/ta-p/2792649 在vsphere client下的路径是&#xff1a; 选择使用的host -> 右键setting->configure-> system->advanced system setting->edit->Net.Coales…

第九节HarmonyOS 常用基础组件31-Toggle

1、描述 组件提供勾选框样式、状态栏样式以及开关样式。 2、子组件 仅当ToggleType为Button时可包含子组件。 3、接口 Toggle(options: { type: ToggleType , isOn?: boolean}) 4、参数 参数名 参数类型 必填 描述 type ToggleType 是 开关的样式。 isOn boole…

蓝桥杯 第3217题 简单的异或难题 C++ Java Python

题目 思路和解题方法 计算给定数组中子数组异或和的问题。它采用了前缀异或的方法来预处理数组&#xff0c;然后对于每个查询&#xff0c;通过异或操作计算子数组的异或和。 读取输入的数组&#xff0c;并计算每个位置的前缀异或和。对于每个查询&#xff0c;读取查询的左右边界…

一文读懂MES和ERP的区别

MES&#xff08;Manufacturing Execution System&#xff09;系统是制造执行系统&#xff0c;位于上层的计划管理系统与生产过程的直接工业控制系统之间&#xff0c;是面向车间层的管理信息系统&#xff0c;能够对整个车间制造过程进行优化&#xff0c;实时收集生产过程中的数据…

python 爬虫 地理空间DEM 制作中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

Java毕业设计-基于springboot开发的乐校园二手书交易管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、卖家用户功能模块4、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springbo…

docker 修改日志存储路径

docker 日志默认存放在 /var/lib/docker/ 下 docker info修改步骤&#xff1a; 1、停止docker服务 systemctl stop docker 2、新建配置文件 vi /etc/docker/daemon.json添加如下内容 {"data-root": "/data/docker" }3、然后把之前的数据全部复制到新目…

LabVIEW柴油机安保监控系统

LabVIEW柴油机安保监控系统 随着航运业的快速发展&#xff0c;确保船舶柴油机的安全稳定运行变得尤为重要。船舶柴油机故障不仅会导致重大的经济损失&#xff0c;还可能危及人员安全和环境。设计并开发了一套基于LabVIEW平台的柴油机安保监控系统&#xff0c;旨在通过实时监控…

C++ 子序列

目录 最长递增子序列 摆动序列 最长递增子序列的个数 最长数对链 最长定差子序列 最长的斐波那契子序列的长度 最长等差数列 等差数列划分 II - 子序列 最长递增子序列 300. 最长递增子序列 子数组是连续的&#xff0c;子序列可以不连续&#xff0c;那么就要去[0, i - 1]…

带你学会深度学习之卷积神经网络[CNN] - 4

前言 本文不讲述如泛化&#xff0c;前向后向传播&#xff0c;过拟合等基础概念。 本文图片来源于网络&#xff0c;图片所有者可以随时联系笔者删除。 本文提供代码不代表该神经网络的全部实现&#xff0c;只是为了方便展示此模型的关键结构。 CNN&#xff0c;常用于计算机视…

OSM欧诗漫加入美妆可持续联盟,共话绿色发展新路径

3月12日&#xff0c;中国化妆品行业首个可持续联盟——美妆可持续联盟&#xff08;BSC&#xff09;正式宣告成立。作为国内珍珠科技美肤领军品牌&#xff0c;OSM欧诗漫受邀成为可持续发展联盟的首批成员&#xff0c;并在第46个植树节之际&#xff0c;与80余家中外同行企业携手种…

rfc793-timewait状态

time wait状态 主动关闭连接的一方&#xff0c;在四次挥手最后一次发送 ACK 后&#xff0c;进入 TIME_WAIT 状态。在这个状态里&#xff0c;主动关闭连接一方等待 2MSL&#xff08;Maximum Segment Life&#xff0c;报文段最大生存时间&#xff0c;在RFC793 中定义为 2 min&…

表情识别数据集

表情视频数据集 在许多的研究中,研究者通常会把人脸表情识别区分为静态的人脸表情识别(static facial emotion recognition)和动态的人脸表情识别(dynamic facial emotion recognition)。前者希望通过单张图片辨别人的表情从而达到识别人情绪的目的,而后者希望感知视频/…

docker一键部署若依前后端分离版本

比如这里把文件放到/xin/docker/jiaoZ/的目录下&#xff0c;jar包和下面的配置文件都放在这个文件夹下。 注意要把jar端口改为你实际启动的&#xff0c;映射端口也可以改为你想要的。 这里的映射端口为&#xff1a;nginx监听80端口&#xff0c;jar在8620端口&#xff0c;mysq…