有人可以帮助我进行交换。我认为这是一个逻辑错误。我知道源片和目的地是正确的,所以我的if语句就是这样。游戏规则:游戏以金字塔结构开始,充满了所有' +'除了一个圆圈',你只能相邻地移动一个挂钩(两个点/对角线),任何被跳过的棋子也会被圆圈替换。例如,你可以对角地移动两个点,并且跳过中间的中间将被圈出来以及原始位置,但是你移动到的那个将用“' +&#39”替换它的圆圈。 ;。视觉图像在下面。此外,变量对应于字母。例如:pa代表现货A,pb代表现货B,依此类推。
第一步是从D到A.第二步是从K到D.我得到的输出不正确。点K,G和B应该是空的,因为B从第一步开始被跳过,而本回合中G被跳过。但是在这里,即使它只有一个' +#,我也会让A空置。现在A已经从游戏的第一步中更新了,但现在又回到了一个圆圈。 A,或' pa'应该从以下声明中更新:*pa = *pd;
以下是代码的链接:https://www.dropbox.com/s/puab7va8vosftdd/Source.c?dl=0
void moveHandler( char source, char destination, char *pa, char *pb, char *pc, char *pd, char *pe, char *pf,
char *pg, char *ph, char *pi, char *pj, char *pk, char *pl, char *pm, char *pn, char *po ) {
char temp;
char middle;
if ( (source || destination == 'D') && (destination || source == 'A') ) {
temp = *pa;
*pa = *pd;
*pd = temp;
}
else if ( (source || destination == 'K') && (destination || source == 'D') ) {
temp = *pk;
*pk = *pd;
*pd = temp;
}
middle = (char) ((source + destination) / 2);
switch( middle ) {
case 66:
*pb = 'o';
break;
case 71:
*pg = 'o';
break;
default:
break;
}
}
答案 0 :(得分:2)
我相信你的逻辑比较/测试需要修改。逻辑运算符&&
和||
均需要应用于要比较的值。例如,它的编写方式,source
正在与destination
进行“或”运算,然后测试结果与char
'D'的相等性。我相信你的意图如下所示。
变化:
if ( (source || destination == 'D') && (destination || source == 'A') ) {
temp = *pa;
*pa = *pd;
*pd = temp;
}
else if ( (source || destination == 'K') && (destination || source == 'D') ) {
temp = *pk;
*pk = *pd;
*pd = temp;
}
收件人:(编辑 - 纠正第一个陈述,用A代替D)
if ( ((source =='D') || (destination == 'D')) && ((source =='A') || (destination == 'A')) ) {
^^^
temp = *pa;
*pa = *pd;
*pd = temp;
}
else if (( (source == 'K') || (destination == 'K')) && ((destination == 'D') || (source == 'D')) ) {
temp = *pk;
*pk = *pd;
*pd = temp;
}
而且,虽然这可能是你想要的,但它可能不是解决问题的必要条件。在第一个if(...)
语句中,无论A
还是D
是destination
还是source
,数据都会从A
复制到D
{1}}。在该形式中,代码的实际意图并不清楚,并且可能不会执行所需的操作。
创建提供意图清晰度的语法。
例如,请注意在您的代码段中,您清楚地确定了3个可能的来源和3个可能的目的地:
虽然以下伪代码建议不像原始语法那样简洁(通常是所需的功能),但它更明确,显示明确的意图并涵盖所有可能的源/目标事务:
if( (source == ‘A’)&&(destination == ‘D’)){//copy A to D}
else if((source == ‘A’)&&(destination == ‘K’)){//copy A to K}
else if((source == ‘D’)&&(destination == ‘A’)){//copy D to A}
else if((source == ‘D’)&&(destination == ‘K’)){//copy D to K}
else if((source == ‘K’)&&(destination == ‘A’)){//copy K to A}
else if((source == ‘K’)&&(destination == ‘D’)){//copy K to D}