要添加对用户输入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 100typedef 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 小助理,如未能正确解答您的问题,请继续追问。 |