鱼C论坛

 找回密码
 立即注册
查看: 395|回复: 1

[已解决]正则

[复制链接]
发表于 2023-12-21 09:06:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[code][/code]
【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决
void AddPlayer(Player players[], int* num_players)
{
        if(*num_players > MAX_PLAYERS)
        {
                printf("棋手信息数量已达最大,无法继续添加!\n");
                return;
        }
        printf("请输入棋手的ID(大写英文字母 P 加 3 位正整数):");
        scanf("%s", players[*num_players].id);
        printf("请输入棋手姓名:");
        scanf("%s", players[*num_players].name);
        printf("请输入棋手身份:");
        scanf("%s", players[*num_players].identity);
        printf("请输入棋手段位:");
        scanf("%s", players[*num_players].rank);
        printf("请输入棋手等级分:");
        scanf("%s", players[*num_players].score);
                        
        (*num_players)++;
                        
        printf("棋手信息添加成功!\n");
                SavePlayer(players, *num_players);
                                printf("本地文件更新成功\n");
}



修改这段C语言代码,使得当用户输入形式不符合要求的ID时给出提示,不用正则表达式
最佳答案
2023-12-21 09:07:03
要实现当用户输入形式不符合要求的ID时给出提示,可以使用字符串操作函数来检查ID的格式是否符合要求。以下是修改后的代码:
  1. void AddPlayer(Player players, int* num_players)
  2. {
  3.     if(*num_players > MAX_PLAYERS)
  4.     {
  5.         printf("棋手信息数量已达最大,无法继续添加!\n");
  6.         return;
  7.     }
  8.    
  9.     char id[5]; // 用来接收用户输入的ID
  10.     printf("请输入棋手的ID(大写英文字母 P 加 3 位正整数):");
  11.     scanf("%s", id);
  12.    
  13.     // 检查ID的格式是否符合要求
  14.     if(strlen(id) != 4 || id[0] != 'P' || !isdigit(id[1]) || !isdigit(id[2]) || !isdigit(id[3]))
  15.     {
  16.         printf("ID格式不符合要求!请重新输入。\n");
  17.         return;
  18.     }
  19.    
  20.     // 如果ID格式符合要求,则将其复制到players结构体中
  21.     strcpy(players.id, id);
  22.    
  23.     printf("请输入棋手姓名:");
  24.     scanf("%s", players.name);
  25.     printf("请输入棋手身份:");
  26.     scanf("%s", players.identity);
  27.     printf("请输入棋手段位:");
  28.     scanf("%s", players.rank);
  29.     printf("请输入棋手等级分:");
  30.     scanf("%s", players.score);
  31.    
  32.     (*num_players)++;
  33.    
  34.     printf("棋手信息添加成功!\n");
  35.     SavePlayer(players, *num_players);
  36.     printf("本地文件更新成功\n");
  37. }
复制代码

在新增棋手时,首先创建一个临时的字符串变量`id`来接收用户输入的ID。然后通过字符串操作函数`strlen`检查ID的长度是否为4,以及通过逐个字符比较来判断ID的格式是否符合要求。如果不符合要求,则给出提示并返回,不继续执行后续代码。如果ID格式符合要求,则将其复制到`players`结构体的`id`字段中,然后继续执行后续的输入和保存操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-21 09:07:03 | 显示全部楼层    本楼为最佳答案   
要实现当用户输入形式不符合要求的ID时给出提示,可以使用字符串操作函数来检查ID的格式是否符合要求。以下是修改后的代码:
  1. void AddPlayer(Player players, int* num_players)
  2. {
  3.     if(*num_players > MAX_PLAYERS)
  4.     {
  5.         printf("棋手信息数量已达最大,无法继续添加!\n");
  6.         return;
  7.     }
  8.    
  9.     char id[5]; // 用来接收用户输入的ID
  10.     printf("请输入棋手的ID(大写英文字母 P 加 3 位正整数):");
  11.     scanf("%s", id);
  12.    
  13.     // 检查ID的格式是否符合要求
  14.     if(strlen(id) != 4 || id[0] != 'P' || !isdigit(id[1]) || !isdigit(id[2]) || !isdigit(id[3]))
  15.     {
  16.         printf("ID格式不符合要求!请重新输入。\n");
  17.         return;
  18.     }
  19.    
  20.     // 如果ID格式符合要求,则将其复制到players结构体中
  21.     strcpy(players.id, id);
  22.    
  23.     printf("请输入棋手姓名:");
  24.     scanf("%s", players.name);
  25.     printf("请输入棋手身份:");
  26.     scanf("%s", players.identity);
  27.     printf("请输入棋手段位:");
  28.     scanf("%s", players.rank);
  29.     printf("请输入棋手等级分:");
  30.     scanf("%s", players.score);
  31.    
  32.     (*num_players)++;
  33.    
  34.     printf("棋手信息添加成功!\n");
  35.     SavePlayer(players, *num_players);
  36.     printf("本地文件更新成功\n");
  37. }
复制代码

在新增棋手时,首先创建一个临时的字符串变量`id`来接收用户输入的ID。然后通过字符串操作函数`strlen`检查ID的长度是否为4,以及通过逐个字符比较来判断ID的格式是否符合要求。如果不符合要求,则给出提示并返回,不继续执行后续代码。如果ID格式符合要求,则将其复制到`players`结构体的`id`字段中,然后继续执行后续的输入和保存操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表