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

C语言数组多条件判断及输入值去重问题求助

问题修复与功能实现方案

一、代码核心错误修复

你的代码存在三个关键错误,导致输出不符合预期:

  • 赋值/比较混淆:if条件里用了赋值运算符=,而非比较运算符==,这会把括号内的判断结果(0或1)赋值给pi.move1[7],而非进行条件判断。
  • 字符/整数判断错误:数组gi.move2和gi.move3存储的是整数0,你却用字符'0'做比较,整数0和字符'0'的ASCII值完全不同(前者是0,后者是48),导致判断永远不成立。
  • 数组越界:数组长度为10,索引范围是0-9,循环条件i <=10会访问不存在的索引10,引发未定义行为。

修正后的基础判断代码:

for (int i = 0; i < 10; i++) {
    // 仅当i=7时检查对应条件,其他位置输出'-'
    if (i == 7 && (gi.move2[7] == 0 || gi.move3[7] == 0)) {
        printf("X");
    } else {
        printf("-");
    }
}

这段代码会输出--------X--,完全符合你的预期。

如果你的需求是每个位置i都检查对应gi.move2[i]/gi.move3[i]是否为0,再匹配pi.move1[i],可调整为:

for (int i = 0; i < 10; i++) {
    if ((gi.move2[i] == 0 || gi.move3[i] == 0) && pi.move1[i] == 8) {
        printf("X");
    } else {
        printf("-");
    }
}

二、输入去重(禁止重复输入8)

要实现输入的8不能重复使用,需在用户输入时遍历pi.move1数组,检查是否已有8存在:

int input_val;
int k = 7; // 假设修改索引7的位置
printf("请输入数字:");
scanf("%d", &input_val);

// 检查输入值为8时是否重复
if (input_val == 8) {
    int has_duplicate = 0;
    for (int j = 0; j < 10; j++) {
        if (pi.move1[j] == 8) {
            has_duplicate = 1;
            break;
        }
    }
    if (has_duplicate) {
        printf("8已被使用,无法重复输入!\n");
        return 1; // 终止或执行其他错误逻辑
    }
}
pi.move1[k] = input_val;

三、完整整合示例

将修复后的判断逻辑和去重输入结合,完整代码如下:

#include <stdio.h>

// 定义结构体(匹配你的数组结构)
typedef struct {
    int move1[10];
} PI;
typedef struct {
    int move2[10];
    int move3[10];
} GI;

int main() {
    GI gi = {{1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}};
    PI pi = {{2,3,4,5,6,7,0,8,1,8}};
    int k = 7;
    int input_val;

    // 带去重的输入处理
    printf("请输入数字:");
    scanf("%d", &input_val);
    if (input_val == 8) {
        int duplicate = 0;
        for (int j = 0; j < 10; j++) {
            if (pi.move1[j] == 8) {
                duplicate = 1;
                break;
            }
        }
        if (duplicate) {
            printf("错误:8已存在,无法重复输入\n");
            return 1;
        }
    }
    pi.move1[k] = input_val;

    // 输出判断结果
    for (int i = 0; i < 10; i++) {
        if (i == 7 && (gi.move2[7] == 0 || gi.move3[7] == 0)) {
            printf("X");
        } else {
            printf("-");
        }
    }
    printf("\n");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:50:23