[英]Going through user input and multi-dimensional arrays in C
我正在尝试编写一个代码,其中用户有 5 次尝试猜测一个数字,如果Winning_order
中的 3 个数字系列中的任何一个,那么两个 for 循环都会中断。 usersInputs
存储要与Winning_order
进行比较的用户输入。 因此,例如,如果用户输入数字1,2,3
或1,2,4,5,3
,循环将打印There is a Correlation
并且 for 循环将停止。 如果输入为7,8,9,3,2
,因为Winning_order
中不存在 3 个数字,循环将停止。 match_arrays
function 有问题,如果if statement
有效,我不知道如何停止嵌套 for 循环 go。
检查 function 是否有关联
int match_arrays(int *arr1, int *arr2, int len) {
for (int p = 0; p < len; p++) {
if (arr1[p] != arr2[p]) {
return 0;
}
}
return 1;
}
主要()function
int main(void)
{
int Winning_order[3][3] = {{1,2,3}, {1,4,7}, {2,5,8}};
int input = 0;
int usersInputs[5] = {0};
for (int i = 0; i <= 4; i++){
printf("\nPlayer input: ");
scanf("%d", &input);
usersInputs[i] = input;
for (int p = 0; p < 5; p++) {
if (match_arrays(usersInputs, Winning_order[p], 3)) {printf("There's a Corelation");}
}}
return 0;
}
有多种方法可以打破双循环(或概括地说:嵌套循环),此解决方案不是最佳、最佳或推荐的解决方案,但它有效。 我修复了缩进和一些命名问题,但我不会修复任何其他问题。
这是一个工作片段:
#include <stdio.h>
int match_arrays(int *arr1, int *arr2, int len) {
for (int p = 0; p < len; p++) {
if (arr1[p] != arr2[p]) {
return 0;
}
}
return 1;
}
int main(void) {
int winning_order[3][3] = {{1,2,3}, {1,4,7}, {2,5,8}};
int input = 0;
int users_inputs[5] = {0};
for (int i, break_i = 0; !break_i && i < 5; i++){
printf("\nPlayer input: ");
scanf("%d", &input);
users_inputs[i] = input;
for (int p = 0; p < 3; p++) {
if (match_arrays(users_inputs, winning_order[p], 3)) {
printf("There's a Corelation\n");
break_i = 1;
break;
}
}
}
return 0;
}
我让这很容易让你理解。 我在名为break_i
的外部for
循环中添加了一个新flag
,其初始值为假值。 同时,我在for
循环中添加了短路&&
操作。
在你的内部循环中,我添加了一个break_i = 1
语句,这将使外部循环停止。 紧接着,我使用break
语句来中断内部循环。
PS:我还修复了@kaylum 指出的索引越界。 下次您可能想使用宏或sizeof()
,但这超出了您问题的 scope 范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.