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.
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