disaste0_0 2023-02-23 06:40 采纳率: 81.6%
浏览 90
已结题

c语言c078报错 太多的初始化器值

`


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>


typedef struct {
    char username[11];
    int level;
    char faction[6];
} User;


typedef struct node {
    User data;
    struct node* next;
} Node;


typedef struct {
    Node* head;
    Node* tail;
} Queue;


void initQueue(Queue* q) {
    q->head = NULL;
    q->tail = NULL;
}

int isQueueEmpty(Queue* q) {
    return (q->head == NULL);
}


void enqueue(Queue* q, User data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    if (q->tail == NULL) {
        q->head = newNode;
    }
    else {
        q->tail->next = newNode;
    }
    q->tail = newNode;
}


void dequeue(Queue* q, User* data) {
    Node* temp;
    *data = q->head->data;
    temp = q->head;
    q->head = q->head->next;
    free(temp);
    if (q->head == NULL) {
        q->tail = NULL;
    }
}

void generateUser(User* user) {
    int i;
    char charset[] = { "abc1234561", "def2222222", "ghi3333333", "opq4444444", "rst5555555", "uvw6666666", "xyz7777777", "ABC1111111", "DEF1234567", "GHI0987654" };
    for (i = 0; i < 11; i++) {
        user->username[i] = charset[rand() % (sizeof(charset) - 1)];
    }
    user->username[10] = '\0';
    user->level = rand() % 60 + 1;
    switch (rand() % 3) {
    case 0:
        strcpy(user->faction, "red");
        break;
    case 1:
        strcpy(user->faction, "blue");
        break;
    case 2:
        strcpy(user->faction, "green");
        break;
    default:
        break;
    }
}


int enqueueUsers(Queue* q, int numUsers) {
    int i;
    User user;
    for (i = 0; i < numUsers; i++) {
        generateUser(&user);
        enqueue(q, user);
    }
    return 0;
}

// test main
int main(int argc, char* argv[]) {
    int numUsers;
    User user;
    Queue q;
    srand(time(NULL));
    if (argc != 2) {
        printf("Usage: %s numUsers\n", argv[0]);
        return 1;
    }
    numUsers = atoi(argv[1]);
    if (numUsers <= 0) {
        printf("Invalid number of users.\n");
        return 1;
    }
    initQueue(&q);
    if (enqueueUsers(&q, numUsers) != 0) {
        printf("Error: Could not enqueue users.\n");
        return 1;
    }
    while (!isQueueEmpty(&q)) {
        dequeue(&q, &user);
        printf("Username: %s, Level: %d, Faction: %s\n", user.username, user.level, user.faction);
    }
    return 0;
}

```

  • 写回答

9条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-23 07:50
    关注

    基于Monster 组和GPT的调写:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    
    typedef struct {
        char username[11];
        int level;
        char faction[6];
    } User;
    
    
    typedef struct node {
        User data;
        struct node* next;
    } Node;
    
    
    typedef struct {
        Node* head;
        Node* tail;
    } Queue;
    
    
    void initQueue(Queue* q) {
        q->head = NULL;
        q->tail = NULL;
    }
    
    int isQueueEmpty(Queue* q) {
        return (q->head == NULL);
    }
    
    
    void enqueue(Queue* q, User data) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = data;
        newNode->next = NULL;
        if (q->tail == NULL) {
            q->head = newNode;
        }
        else {
            q->tail->next = newNode;
        }
        q->tail = newNode;
    }
    
    
    void dequeue(Queue* q, User* data) {
        Node* temp;
        *data = q->head->data;
        temp = q->head;
        q->head = q->head->next;
        free(temp);
        if (q->head == NULL) {
            q->tail = NULL;
        }
    }
    
    void generateUser(User* user) {
        int i;
        char charset[][11] = { "abc1234561", "def2222222", "ghi3333333", "opq4444444", "rst5555555", "uvw6666666", "xyz7777777", "ABC1111111", "DEF1234567", "GHI0987654", "MyUsername1", "MyUsername2", "MyUsername3" };
        strcpy(user->username, charset[rand() % 10]);
        user->level = rand() % 60 + 1;
        switch (rand() % 3) {
        case 0:
            strcpy(user->faction, "red");
            break;
        case 1:
            strcpy(user->faction, "blue");
            break;
        case 2:
            strcpy(user->faction, "green");
            break;
        default:
            break;
        }
    }
    
    
    
    
    int enqueueUsers(Queue* q, int numUsers) {
        int i;
        User user;
        for (i = 0; i < numUsers; i++) {
            generateUser(&user);
            enqueue(q, user);
        }
        return -1; // 根据实际情况返回 -1 表示出错
    }
    
    int main(int argc, char* argv[]) {
        int numUsers = 10;
        User user;
        Queue q;
        srand(time(NULL));
        initQueue(&q);
        if (enqueueUsers(&q, numUsers) != -1) { // 判断是否出错
            printf("Error: Could not enqueue users.\n");
            return 1;
        }
        while (!isQueueEmpty(&q)) {
            dequeue(&q, &user);
            printf("Username: %s, Level: %d, Faction: %s\n", user.username, user.level, user.faction);
        }
        getchar(); // 在 Windows 系统下加入该语句以防止程序窗口立即关闭
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 2月23日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大