C语言基础(十六)

C语言中的结构体(Struct)是一种用户自定义的数据类型,允许将不同类型的数据项组合成一个单一的类型:

测试代码1:

cpp 复制代码
#include "date.h"
#include <stdio.h>  
#include <string.h>  
  
// 定义衣服结构体  
struct Clothes {  
    char name[50]; // 衣服名称  
    char color[20]; // 衣服颜色  
    int size; // 尺码  
    float price; // 价格  
};  
  
int main() {  
    int time = getTime();
    // 创建衣服结构体数组 
    struct Clothes clothes[3];  
  
    // 使用"."访问并设置每件衣服的信息  
    strcpy(clothes[0].name, "衬衫");  
    strcpy(clothes[0].color, "白色");  
    clothes[0].size = 39;  
    clothes[0].price = 59.99;  
  
    strcpy(clothes[1].name, "牛仔裤");  
    strcpy(clothes[1].color, "蓝色");  
    clothes[1].size = 32;  
    clothes[1].price = 99.99;  
  
    strcpy(clothes[2].name, "外套");  
    strcpy(clothes[2].color, "黑色");  
    clothes[2].size = 42;  
    clothes[2].price = 159.99;  
  
    // 遍历数组并打印每件衣服的信息  
    for (int i = 0; i < 3; i++) {  
        printf("衣服名称: %s\n", clothes[i].name);  
        printf("衣服颜色: %s\n", clothes[i].color);  
        printf("尺码: %d\n", clothes[i].size);  
        printf("价格: %.2f\n\n", clothes[i].price);  
    }  
  
    return 0;  
}

运行结果如下:

测试代码2:

cpp 复制代码
#include"date.h" 
#include <stdio.h>  
#include <string.h>  
  
// 定义衣服结构体  
struct Clothes {  
    char name[50]; // 衣服名称  
    char color[20]; // 衣服颜色  
    int size; // 尺码(假设用整数表示不同尺码)  
    float price; // 价格  
};  
  
int main() {  
    int time = getTime();
    // 创建衣服结构体变量  
    struct Clothes shirt;  
  
    // 使用"."访问并设置shirt的成员  
    strcpy(shirt.name, "衬衫");  
    strcpy(shirt.color, "白色");  
    shirt.size = 39;  
    shirt.price = 59.99;  
  
    // 打印shirt的信息  
    printf("衣服名称: %s\n", shirt.name);  
    printf("衣服颜色: %s\n", shirt.color);  
    printf("尺码: %d\n", shirt.size);  
    printf("价格: %.2f\n", shirt.price);  
  
    // 定义一个指向衣服的指针  
    struct Clothes *ptr = &shirt;  
  
    // 使用"->"访问并打印ptr指向的衣服的信息  
    printf("通过指针访问的衣服名称: %s\n", ptr->name);  
    printf("通过指针访问的衣服颜色: %s\n", ptr->color);  
    printf("通过指针访问的尺码: %d\n", ptr->size);  
    printf("通过指针访问的价格: %.2f\n", ptr->price);  
  
    return 0;  
}

运行结果如下:

测试代码3:

cpp 复制代码
#include "date.h" 
#include <stdio.h>  
#include <string.h>  
#include <stdbool.h>  
#include <limits.h> 
// 定义运动员结构体 
typedef struct {  
    int id;  
    char name[50];  
    float height;  
    float weight;  
} Athlete;  
  
bool read_integer(const char *prompt, int *value) {  
    while (true) {  
        printf("%s", prompt);  
        if (scanf("%d", value) == 1) {  
            // 成功读取一个整数  
            return true;  
        }  
        // 清除输入缓冲区中的错误输入  
        int c;  
        while ((c = getchar()) != EOF && c != '\n');  
        // 提示重新输入  
        printf("输入无效,请输入一个整数:");  
    }  
}  
  
bool read_float(const char *prompt, float *value) {  
    while (true) {  
        printf("%s", prompt);  
        if (scanf("%f", value) == 1) {  
            // 成功读取一个浮点数  
            return true;  
        }  
        // 清除输入缓冲区中的错误输入  
        int c;  
        while ((c = getchar()) != EOF && c != '\n');  
        // 提示重新输入  
        printf("输入无效,请输入一个浮点数:");  
    }  
}  
  
bool read_string(const char *prompt, char *buffer, size_t bufsize) {  
    printf("%s", prompt);  
    if (fgets(buffer, bufsize, stdin) == NULL) {  
        // fgets失败
        return false;  
    }  
    // 去除字符串末尾的换行符(如果有的话)  
    size_t len = strlen(buffer);  
    if (len > 0 && buffer[len - 1] == '\n') {  
        buffer[len - 1] = '\0';  
    }  
    // fgets总是读取一行  
    // 如果需要验证字符串内容(比如非空),可以在这里实现。 
    return true;  
}  
  
int main() {  
    int time = getTime();
    Athlete athlete;  
    int n;  
  
    if (!read_integer("请输入运动员数量: ", &n) || n <= 0) {  
        fprintf(stderr, "无效的运动员数量。\n");  
        return 1;  
    }  
  
    for (int i = 0; i < n; i++) {  
        printf("请输入第 %d 个运动员的信息:\n", i + 1);  
        if (!read_integer("  ID: ", &athlete.id)) {  
            fprintf(stderr, "无法读取运动员ID。\n");  
            continue; // 或者退出循环/程序  
        }  
        if (!read_float("  身高(米): ", &athlete.height) || athlete.height < 0) {  
            fprintf(stderr, "无效的身高值。\n");  
            continue;  
        }  
        if (!read_float("  体重(公斤): ", &athlete.weight) || athlete.weight < 0) {  
            fprintf(stderr, "无效的体重值。\n");  
            continue;  
        }  
        if (!read_string("  姓名: ", athlete.name, sizeof(athlete.name))) {  
            fprintf(stderr, "无法读取运动员姓名。\n");  
            continue;  
        }  
  
        // 打印运动员信息或将其添加到数据结构中  
        printf("运动员ID: %d, 姓名: %s, 身高: %.2f米, 体重: %.2f公斤\n",  
               athlete.id, athlete.name, athlete.height, athlete.weight);  
    }  
  
    return 0;  
}

运行结果如下:

相关推荐
微功夫信息技术6 分钟前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
T1mzhou19 分钟前
ARM64 Linux 6.10内核启动流程7-ioremap和readl writel
linux·服务器·c语言
sanjiaomao3331 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
Keven_111 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
乐迪信息1 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪
脉动数据行情11 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕2 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2332 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
OpenAnolis小助手3 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
小玮看世界3 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法