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;  
}

运行结果如下:

相关推荐
武昌库里写JAVA5 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
ZSYP-S40 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos43 分钟前
c++------------------函数
开发语言·c++
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习1 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
程序员_三木1 小时前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
ALISHENGYA1 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
tianmu_sama1 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
chengooooooo1 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展