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
相关产品推荐
相关产品推荐

