游戏防沉迷

c语言实现:输入n行数据,每行包含人名 和 游戏名,按照人名出现的顺序,输出人名和他玩过的游戏;

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

#define MAX_PEOPLE 100
#define MAX_GAMES 50
#define MAX_NAME_LEN 50

// 结构体存储人名和对应的游戏列表
typedef struct {
    char name[MAX_NAME_LEN];
    char games[MAX_GAMES][MAX_NAME_LEN];
    int game_count;
} Person;

Person people[MAX_PEOPLE];
int person_count = 0;

// 查找人名在数组中的位置,如果不存在则添加
int find_or_add_person(const char *name) {
    for (int i = 0; i < person_count; i++) {
        if (strcmp(people[i].name, name) == 0) {
            return i;  // 找到,返回索引
        }
    }
    
    // 没找到,添加新人
    if (person_count < MAX_PEOPLE) {
        strcpy(people[person_count].name, name);
        people[person_count].game_count = 0;
        return person_count++;
    }
    return -1;  // 数组已满
}

// 为指定的人添加游戏(如果该游戏不存在)
void add_game(int person_index, const char *game) {
    Person *p = &people[person_index];
    
    // 检查游戏是否已经存在
    for (int i = 0; i < p->game_count; i++) {
        if (strcmp(p->games[i], game) == 0) {
            return;  // 游戏已存在,不重复添加
        }
    }
    
    // 添加新游戏
    if (p->game_count < MAX_GAMES) {
        strcpy(p->games[p->game_count], game);
        p->game_count++;
    }
}

int main() {
    int n;
    char name[MAX_NAME_LEN];
    char game[MAX_NAME_LEN];
    
    printf("请输入数据行数: ");
    scanf("%d", &n);
    getchar();  // 消耗换行符
    
    printf("请输入%d行数据(格式:人名 游戏名):\n", n);
    
    // 读取输入数据
    for (int i = 0; i < n; i++) {
        scanf("%s %s", name, game);
        getchar();  // 消耗换行符
        
        int index = find_or_add_person(name);
        if (index != -1) {
            add_game(index, game);
        }
    }
    
    // 按照人名出现的顺序输出结果
    printf("\n输出结果:\n");
    for (int i = 0; i < person_count; i++) {
        printf("%s: ", people[i].name);
        for (int j = 0; j < people[i].game_count; j++) {
            printf("%s", people[i].games[j]);
            if (j < people[i].game_count - 1) {
                printf(", ");
            }
        }
        printf("\n");
    }
    
    return 0;
}

全部评论

相关推荐

皮格吉:不,有的厂子面试无手撕,可以试试。都是一边学一边面。哪有真正准备好的时候,别放弃
无实习如何秋招上岸
点赞 评论 收藏
分享
08-19 19:57
石河子大学 C++
企鹅百度字节的孝子:为啥本科只有两年啊
校招求职吐槽
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务