【问题标题】:Going through user input and multi-dimensional arrays in C在 C 中遍历用户输入和多维数组
【发布时间】:2021-05-21 00:30:59
【问题描述】:

我正在尝试编写一个代码,其中用户有 5 次尝试猜测一个数字,如果 Winning_order 中的 3 个数字系列中的任何一个,那么两个 for 循环都会中断。 usersInputs 存储用户输入以与Winning_order 进行比较。例如,如果用户输入数字1,2,31,2,4,5,3,则循环将打印There is a Correlation,for 循环将停止。如果输入是7,8,9,3,2,因为Winning_order 中没有3 个数字,则循环将停止。 match_arrays 函数存在问题,如果 if statement 有效,我不知道如何停止嵌套的 for 循环。

检查函数是否具有相关性

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;
}

main() 函数

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;
}

【问题讨论】:

  • C 代码请使用更正统的缩进样式。很难阅读您的布局。单行上有多个右大括号是禁止的;同一缩进级别的多个连续右大括号是另一个(未显示)。
  • Winning_order[p] 这不可能。 p 上升到 4 而只有 0, 1, 2Winning_order 的有效索引。

标签: arrays c function for-loop input


【解决方案1】:

有不同的方法可以打破双循环(或概括为:嵌套循环),这个解决方案不是最优的、最好的或推荐的,但它确实有效。我修复了缩进和一些命名问题,但我不会修复其他任何问题。

这是一个有效的 sn-p:

#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;
}

我使这很容易让您理解。我在外部for 循环中添加了一个新的flag,名为break_i,初始值为假。同时,我在for循环中添加了短路&amp;&amp;操作。

在您的内部循环中,我添加了一个break_i = 1 语句,该语句将使外部循环停止。紧接着,我使用break 语句打破内循环。


P.S.:我还修复了@kaylum 指出的超出范围的索引。下次您可能想使用宏或sizeof(),但这超出了您的问题范围。

【讨论】:

  • 感谢打破 for 循环的代码,但数字 2,5,81,2,4,5,3 不起作用。 for 循环中断运行良好,谢谢
  • 这不是你问题的一部分,所以我没有回答。如上所述,我不会修复嵌套循环中断之外的任何内容 :)
猜你喜欢
  • 2012-04-16
  • 2010-11-01
  • 2016-01-12
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多