百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
P

printf-tac-toe

> 编程语言
开源

在单个 printf 调用中实现 tic-tac-toe

2.5K stars0 点赞2 次浏览
访问官网GitHub

工具介绍

在单个 printf 调用中实现 tic-tac-toe

打印塔科特棋

一个 tic-tac-toe 的 C 实现,只需一次调用 printf。为 IOCCC 2020 编写。

…

如果您喜欢这种内容,您可能还会喜欢 printbf。

使用方法

gcc -o prog prog.c ./prog 交替显示 P1 和 P2。输入一个数字 [1-9] 以进行移动: 1 | 2 | 3

4 | 5 | 6

7 | 8 | 9 如果以下情况发生,游戏结束:

  • 一个玩家连续完成三次; 该玩家获胜
  • 所有方格都被占用了;两方都没有获胜
  • 一个玩家做出了非法的动作; 他们的对手获胜

为什么?

混淆

整个程序只包含一次对 printf 的调用。 int main() { while(*d) printf(fmt, arg); }

这里,fmt 是一个单个字符串,arg 是一系列要传给 printf 的参数。虽然其主要用途是作为 The One True Debugger,printf 也恰好是图灵完备的(参见 "Control-Flow Bending: On the Effectiveness of Control-Flow Integrity",我们在一篇实际的、已发表的学术论文中介绍了这一点。有时你可以做到的事情)。我们利用这个事实来在一个 printf 调用(以及一个用于读取用户输入的 scanf() 调用)中实现 tic-tac-toe 的逻辑。

此程序使用了三个 printf 格式指定符。 - %d 接收一个整数参数并将其打印出来 - %s 接收一个字符串参数并将其打印出来 - %n 接收一个指针并写入 (!!) 到目前为止打印的字节数。 好了,大家可能都知道这些。 让我们更进一步。 格式指定符可以接收额外的"参数"。 - "%hhn": 将写入的字节数 mod 256 存储到 char 指针中 - "%2$d": 将参数 2 打印到 printf 中(而不是顺序下一个参数) - "%8d": 将打印的整数填充到 8 个字符 - "%3$.*4$d": 将参数 3 打印到 printf 中,并使用参数 4 中的零数量。 例如,以下表达式

将产生与以下代码相同的效果:

IOCCC

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

C

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言