Menu
CoddyTech

Học kỹ năng

Bài học 5 trên 8 trong khóa học Lớp người dùng, dự án OOP của Coddy.

challenge icon

Thử thách

Dễ

Trong lớp User này, bạn cũng lưu những kỹ năng mà người dùng đã học và cấp độ của họ trong từng kỹ năng (giống như trong Coddy!).

Thêm một phương thức có tên learn, nhận một kỹ năng (một chuỗi) và tăng cấp độ của người dùng trong kỹ năng đó lên một.

Bạn sẽ cần một cấu trúc dữ liệu nào đó để quản lý tất cả kỹ năng và cấp độ của người dùng (mảng, danh sách, map, v.v.).

Tự làm thử

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

int main() {
    User u;
    User_init(&u, "", "");
    char line[1024];
    while (fgets(line, sizeof(line), stdin)) {
        line[strcspn(line, "\r\n")] = '\0';
        char* cmd = strtok(line, " \t");
        if (!cmd) continue;
        if (strcmp(cmd, "new") == 0) {
            char* un = strtok(NULL, " \t");
            char* em = strtok(NULL, " \t");
            User_init(&u, un ? un : "", em ? em : "");
        }
        if (strcmp(cmd, "username") == 0) { printf("%s\n", u.username); }
        if (strcmp(cmd, "email") == 0) { printf("%s\n", u.email); }
        if (strcmp(cmd, "setLocation") == 0) { char* v = strtok(NULL, " \t"); if (v) User_setLocation(&u, v); }
        if (strcmp(cmd, "getLocation") == 0) { printf("%s\n", User_getLocation(&u)); }
        if (strcmp(cmd, "info") == 0) { User_info(&u); }
        if (strcmp(cmd, "learn") == 0) { char* v = strtok(NULL, " \t"); if (v) User_learn(&u, v); }
        if (strcmp(cmd, "dumpSkills") == 0) {
            int idx[USER_MAX_SKILLS]; int n = u.skillCount;
            for (int i = 0; i < n; i++) idx[i] = i;
            for (int i = 0; i < n - 1; i++) {
                for (int j = 0; j < n - 1 - i; j++) {
                    if (strcmp(u.skills[idx[j]].name, u.skills[idx[j+1]].name) > 0) {
                        int t = idx[j]; idx[j] = idx[j+1]; idx[j+1] = t;
                    }
                }
            }
            for (int i = 0; i < n; i++) {
                printf("%s: %d\n", u.skills[idx[i]].name, u.skills[idx[i]].level);
            }
        }
    }
    return 0;
}

Tất cả bài học trong Lớp người dùng, dự án OOP

Tự luyện tập: Trình biên dịch C online