|
发表于 2023-12-21 09:03:55
|
显示全部楼层
要添加对用户输入ID格式的判断,可以使用正则表达式。
首先,需要引入正则表达式相关的头文件:
然后,在`AddPlayer`函数中增加一个正则表达式的验证函数:
- int validateID(const char* id) {
- // 定义正则表达式的模式
- const char* pattern = "^P[0-9]{3}$";
- regex_t reg;
- int ret;
- // 编译正则表达式
- if (regcomp(®, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
- printf("正则表达式编译失败!\n");
- return 0;
- }
- // 执行正则表达式匹配
- ret = regexec(®, id, 0, NULL, 0);
- // 释放正则表达式
- regfree(®);
- return (ret == 0);
- }
复制代码
在`AddPlayer`函数中,在调用`scanf`函数之前,先进行ID格式的验证:
- printf("请输入棋手的ID(大写英文字母 P 加 3 位正整数):");
- scanf("%s", players.id);
- // 验证ID格式是否正确
- if (!validateID(players.id)) {
- printf("ID格式不正确,请重新输入!\n");
- return;
- }
复制代码
这样,当用户输入的ID格式不符合要求时,程序会给出提示,并终止继续执行。完整代码如下所示:
- #include <stdio.h>
- #include <regex.h>
- #define MAX_PLAYERS 100
- typedef struct Player {
- char id[5];
- char name[20];
- char identity[20];
- char rank[20];
- char score[20];
- } Player;
- void SavePlayer(Player player, int num_players) {
- // 保存棋手信息到文件
- // ...
- }
- int validateID(const char* id) {
- // 定义正则表达式的模式
- const char* pattern = "^P[0-9]{3}$";
- regex_t reg;
- int ret;
- // 编译正则表达式
- if (regcomp(®, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
- printf("正则表达式编译失败!\n");
- return 0;
- }
- // 执行正则表达式匹配
- ret = regexec(®, id, 0, NULL, 0);
- // 释放正则表达式
- regfree(®);
- return (ret == 0);
- }
- void AddPlayer(Player players, int* num_players) {
- if(*num_players > MAX_PLAYERS) {
- printf("棋手信息数量已达最大,无法继续添加!\n");
- return;
- }
- printf("请输入棋手的ID(大写英文字母 P 加 3 位正整数):");
- scanf("%s", players.id);
- // 验证ID格式是否正确
- if (!validateID(players.id)) {
- printf("ID格式不正确,请重新输入!\n");
- return;
- }
- printf("请输入棋手姓名:");
- scanf("%s", players.name);
- printf("请输入棋手身份:");
- scanf("%s", players.identity);
- printf("请输入棋手段位:");
- scanf("%s", players.rank);
- printf("请输入棋手等级分:");
- scanf("%s", players.score);
- (*num_players)++;
- printf("棋手信息添加成功!\n");
- SavePlayer(players, *num_players);
- printf("本地文件更新成功\n");
- }
- int main() {
- Player players;
- int num_players = 0;
- AddPlayer(players, &num_players);
- return 0;
- }
复制代码
注意:这里只是简单使用正则表达式进行ID格式的验证,可能存在一些特殊情况未考虑到,更严格的ID验证可以使用其他方式实现。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|