打卡学习C语言-结构体

文章介绍了如何在C语言中定义和使用结构体,包括创建结构体对象、初始化以及通过指针访问结构体成员。文中提到了.操作符和->操作符的区别,后者在指针变量中用于访问所指对象的成员。示例代码展示了如何定义一个学生结构体,创建对象并初始化,以及如何编写一个函数通过指针来访问结构体成员。
摘要由CSDN通过智能技术生成

.操作符

->操作符

结构体:把单一的类型组成一起。

关键字:struct

struct student
{
    //成员
    char name[20];
    int age;
    char sex[10];
    char tel[15];
};

用结构体创建一个对象stu,且初始化

​
int main()
{
    //用结构体创建一个对象stu 并初始化一些内容
    struct student stu = {"zhangsan",20,"male","11222333"};

   
    return 0;
}

​

访问结构体中的成员

结构体对象.成员名

stu.name

另一种方法:将stu的地址取出来传给函数addressFun()

addressFun(&stu);

地址(指针)要存放在指针变量中

struct student* s

创建一个没有返回值的addressFun()函数

void addressFun(struct student* s)
{
    


};

s(指针变量)中存放的是stu的地址

通过解引用(*s)找到的是stu对象

(*s).name 访问成员中的name

void addressFun(struct student* s)
{
   
    printf("%s %d %s %s\n",(*s).name,(*s).age,(*s).sex,(*s).tel);
  

};

优化一下:使用 -> 操作符

结构体指针变量->成员名

s->name   s指向的那个对象(stu)的name

void addressFun(struct student* s)
{
    
    //s->name   s指向的那个对象的name
    //结构体指针变量->成员名
    printf("%s %d %s %s\n",s->name,s->age,s->sex,s->tel);


};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,以下是一个简单的考勤打卡系统的C语言示例: ```c #include <stdio.h> #include <time.h> // 定义员工结构体 struct Employee { int id; char name[50]; int lateCount; int earlyCount; int absentCount; }; // 定义全局变量 struct Employee employees[10]; int employeeCount = 0; // 函数声明 void clockIn(int employeeId); void clockOut(int employeeId); void viewAttendance(); void searchAttendance(); void deleteAttendance(); void modifyAttendance(); int main() { int choice; int employeeId; char password[50]; // 主菜单 do { printf("1. 员工上班打卡\n"); printf("2. 员工下班打卡\n"); printf("3. 查看考勤情况\n"); printf("4. 查询考勤信息\n"); printf("5. 删除考勤信息\n"); printf("6. 修改考勤信息\n"); printf("7. 退出\n"); printf("请输入您的选择:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入员工ID:"); scanf("%d", &employeeId); clockIn(employeeId); break; case 2: printf("请输入员工ID:"); scanf("%d", &employeeId); clockOut(employeeId); break; case 3: viewAttendance(); break; case 4: searchAttendance(); break; case 5: deleteAttendance(); break; case 6: modifyAttendance(); break; case 7: printf("谢谢使用!\n"); break; default: printf("无效的选择,请重新输入。\n"); break; } } while (choice != 7); return 0; } // 上班打卡 void clockIn(int employeeId) { time_t now; time(&now); struct tm *local = localtime(&now); // 检查员工是否存在 int i; for (i = 0; i < employeeCount; i++) { if (employees[i].id == employeeId) { // 更新上班时间 printf("员工 %s 上班打卡成功,打卡时间:%02d:%02d:%02d\n", employees[i].name, local->tm_hour, local->tm_min, local->tm_sec); return; } } // 员工不存在 printf("员工ID %d 不存在。\n", employeeId); } // 下班打卡 void clockOut(int employeeId) { time_t now; time(&now); struct tm *local = localtime(&now); // 检查员工是否存在 int i; for (i = 0; i < employeeCount; i++) { if (employees[i].id == employeeId) { // 更新下班时间 printf("员工 %s 下班打卡成功,打卡时间:%02d:%02d:%02d\n", employees[i].name, local->tm_hour, local->tm_min, local->tm_sec); return; } } // 员工不存在 printf("员工ID %d 不存在。\n", employeeId); } // 查看考勤情况 void viewAttendance() { int i; for (i = 0; i < employeeCount; i++) { printf("员工ID:%d\n", employees[i].id); printf("员工姓名:%s\n", employees[i].name); printf("迟到次数:%d\n", employees[i].lateCount); printf("早退次数:%d\n", employees[i].earlyCount); printf("旷工天数:%d\n", employees[i].absentCount); printf("\n"); } } // 查询考勤信息 void searchAttendance() { int choice; printf("1. 按员工ID查询\n"); printf("2. 按员工姓名查询\n"); printf("请输入查询方式:"); scanf("%d", &choice); switch (choice) { case 1: // 按员工ID查询 break; case 2: // 按员工姓名查询 break; default: printf("无效的选择。\n"); break; } } // 删除考勤信息 void deleteAttendance() { // 需要密码验证 char password[50]; printf("请输入密码:"); scanf("%s", password); // 删除考勤信息 } // 修改考勤信息 void modifyAttendance() { // 需要密码验证 char password[50]; printf("请输入密码:"); scanf("%s", password); // 修改考勤信息 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值