c语言getchar用法_井字棋C语言源码学习

ec763d983a73f60fded79eac45a32b89.png

发现一篇很好的C语言入门的文章,看代码发现有几个难点,我百度学习了下,并写下这篇解释文章。

Milo Yip:用C语言实现井字棋(上)

难点及其解释

难点1:字符串后面加中括号[]

例如:

putchar("||n"[i++])
printf(" %c ", s->board[j][i] == -1 ? '1' + j * 3 + i : "OX"[s->board[j][i]]);
printf("%c: ", "OX"[s->turn % 2]);

难点1解答:

"||n"不就是个常字符串吗?字符串不也代表第一个字符的指针吗?

现在我们假设有char *x="||n";的定义,那么putchar("||n"[i++])就等价为putchar(x[i++])。

putchar("||n"[i++])在:

i=0对应x[0],输出为: |

i=1对应 x[1],输出为:|

i=2对应 x[2],输出为:n

"OX"[s->board[j][i]]和"OX"[s->turn % 2]类似。

参考:关于C语言putchar函数的表示:putchar("||n"[i++])_百度知道

难点2:while (c < '1' || c > '9' || !move(s, (c - '1') % 3, (c - '1') / 3))

难点2解答:(c - '1') % 3, (c - '1') / 3的结果都在0,1,2范围,则move(s, (c - '1') % 3, (c - '1') / 3)为true,否则(c - '1') % 3, (c - '1') / 3的结果不在0,1,2范围时,move(s, (c - '1') % 3, (c - '1') / 3)为false。

在每一回合中,提示当前玩家(O 或 X),并让玩家输入一个下棋位置(1-9),如果位置不合法,则重新输入。

难点3:while (getchar() != 'n');

难点3解答:没有按回车键,就不读入、不进行任何操作。

在标准输入中,要到回车键才能处理输入,所以这里我们读了第一个输入字符后,就忽略其他字符直到读到换行符。

难点4:for (j = 0; j < 3; j++) {
for (i = 0; i < 3; i++) {

难点4解答:j 是列序号,i是行序号。

难点5:(s.turn < 9)

难点5解答:struct变量的运用。

参考:C语言结构体详解,C语言struct用法详解

源码:

#include 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值