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

CSFML窗口开闭代码修改求助:条件分支不得超3个且需保证逻辑正确

CSFML 窗口开闭实现(满足条件分支≤3限制)

你的现有代码本身仅含1个条件分支,完全符合限制要求。如果需要扩展功能(比如支持多方式关闭窗口),也能在不超过3个分支的前提下完成,同时保证代码稳定:

int main(void)
{
    sfRenderWindow *window;
    sfVideoMode video_mode = {1920, 1080, 32}; // 直接初始化简化代码
    sfEvent event;

    window = sfRenderWindow_create(video_mode, "MyWindow", sfDefaultStyle, NULL);
    while (sfRenderWindow_isOpen(window)) {
        sfRenderWindow_display(window);
        while (sfRenderWindow_pollEvent(window, &event)) {
            // 分支1:点击窗口关闭按钮
            if (event.type == sfEvtClosed)
                sfRenderWindow_close(window);
            // 分支2:按下ESC键关闭窗口(可选扩展)
            else if (event.type == sfEvtKeyPressed && event.key.code == sfKeyEscape)
                sfRenderWindow_close(window);
            // 分支3:可添加其他单一逻辑事件(比如F11切换全屏)
            else if (event.type == sfEvtKeyPressed && event.key.code == sfKeyF11)
                sfRenderWindow_setFullscreen(window, !sfRenderWindow_isFullscreen(window));
        }
    }
    // 补充窗口销毁,避免内存泄漏
    sfRenderWindow_destroy(window);
    return 0;
}

关键说明:

  • 原代码已满足分支数限制,扩展后最多3个分支,仍符合要求。
  • 简化sfVideoMode初始化写法,代码更简洁且无语法错误。
  • 补充窗口销毁操作,这是CSFML程序的标准收尾步骤,避免内存泄漏。
  • 每个分支对应单一事件逻辑,结构清晰,不会引入额外错误。

如果仅需基础的窗口开闭功能,原代码补充销毁步骤后即可稳定运行:

int main(void)
{
    sfRenderWindow *window;
    sfVideoMode video_mode = {1920, 1080, 32};
    sfEvent event;

    window = sfRenderWindow_create(video_mode, "MyWindow", sfDefaultStyle, NULL);
    while (sfRenderWindow_isOpen(window)) {
        sfRenderWindow_display(window);
        while (sfRenderWindow_pollEvent(window, &event)) {
            if (event.type == sfEvtClosed)
                sfRenderWindow_close(window);
        }
    }
    sfRenderWindow_destroy(window);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:55:28