You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言循环迭代中静态创建Player实例及相关问题排查

问题解决方案

1. 循环中静态创建Player实例的合理性

你在循环里声明Player New_Player;是完全可行的:

  • 这个变量是栈上的局部变量,每次循环迭代时会重新分配内存,循环结束后自动销毁。
  • 但你已经通过Record_Of_Payers[Players_active - 1] = New_Player;把它的内容拷贝到了静态数组中,所以即使New_Player销毁,数组里的内容依然保留,完全符合你“避免动态内存”的需求。
  • 这部分逻辑无需修改,当前写法是合理的。

2. 输入'7'无法立即终止循环的问题

问题出在scanf("%s\n", Name);的格式字符串里的\n:

  • scanf的格式字符串中,\n会匹配任意数量的空白字符(包括换行、空格、制表符),所以当你输入7并按下回车后,scanf会继续等待,直到读取到非空白字符才会返回,导致需要额外输入字符才能触发判断。
  • 修正方法:去掉格式字符串里的\n,改成:
    scanf("%s", Name);
    
    这样输入7并回车后,scanf会立即读取"7"到Name数组中,进入else分支终止循环。

3. 代码中的拼写错误

你调用初始化函数时写了Register_PLayer_Finalisation,但函数实际名字是Register_Player_Finalisation(P和L的大小写颠倒了),这个拼写错误会导致编译失败,需要修正为正确的函数名。

4. 未定义变量问题

原代码中Record[0] = Player_created;和Record[Players_active - 1] = New_Player;里的Record是未定义的,应该替换为函数参数Record_Of_Payers,否则会触发编译错误。

修正后的完整代码片段

int Register_Player(Player *Record_Of_Payers)
{
    int Players_active = 1;
    char Name[20];
    scanf("%s", Name); // 去掉格式串中的\n
    char Role[20] = "Not_Yet";
    char State[8] = "Not_Yet";
    int Money = 2000;
    Player Player_created;
    Register_Player_Finalisation(Name, Money, Role, State, &Player_created); // 修正函数名拼写
    Record_Of_Payers[0] = Player_created; // 替换为正确的数组名

    /* Boucle pour ajouter des joueurs */
    while (Players_active < 6 )
    {
        scanf("%s", Name); // 去掉格式串中的\n
        if (*Name != '7')
        {
            Players_active++;
            Player New_Player;
            Register_Player_Finalisation(Name, Money, Role, State, &New_Player); // 修正函数名拼写
            Record_Of_Payers[Players_active - 1] = New_Player; // 替换为正确的数组名
        }
        else
        {
            printf("Exception \n");
            break;
        }
    }
    return Players_active;
}

额外优化(可选)

如果需要支持带空格的玩家名字,%s无法满足,此时可以改用fgets读取输入并处理换行符:

fgets(Name, sizeof(Name), stdin);
// 去掉fgets读取到的换行符
size_t len = strlen(Name);
if (len > 0 && Name[len-1] == '\n') {
    Name[len-1] = '\0';
}

内容的提问来源于stack exchange,提问作者th_o_mas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:33:22