【问题标题】:Arduino C Multi dimensional array switchingArduino C 多维数组切换
【发布时间】:2019-01-03 10:57:22
【问题描述】:

我的一段 Arduino 代码卡住了

基本上我有一个多维数组,其中每个索引都将存储一个随机字母。但是在一小段时间(例如 900 毫秒)之后,索引中的每个值都会向上移动到它上面的索引。当然,当索引达到例如[9][0] 它将转到最大的索引,例如 [9][9]

例如:myArray[9][8] 包含“K”,myArray[9][7] 包含“L”

myArray[9][8] 中的“K”将放入 myArray[9][7],myArray[9][7] 中的“L”将放入 myArray[9][6] 等.等

但我不知道如何在 C 中执行此操作... myArray[9][8] = myArray[9][7] 显然行不通

【问题讨论】:

  • 向我们展示您的代码
  • myArray[9][8] = myArray[9][7] 有什么问题?或者使用临时变量tmp = myArray[9][0]; myArray[9][0] = ...[1]; ...[1] = ...[2]; ... ...[9] = tmp 更好
  • @KamilCuk 我猜它会朝错误的方向移动。根据描述,它将是myArray[9][7] = myArray[9][8]。通常可以使用带有myArray[9][i] = myArray[9][i+1]for 循环,其中包含处理换行的代码和存储“myArray[9][0]”的临时代码。

标签: c arrays multidimensional-array


【解决方案1】:

赋值没有问题,但你必须先保存你正在写的元素。

在这个例子中,所有重写的值都保存在每一行的最后一个槽中,这只是一个例子——不是唯一的方法,如果你需要跨行移动字母,这个想法是相似的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void moveLettersInRow(char sArr[][3], int row)
{
    int i = 0;
    int j = 0;
    char temp ;

    for (i = 0; i < row; ++i)
    {

       for(j = 2 ;j > 0;--j)
       {

           temp = sArr[i][j-1]; /*save the value to be rewritten */
           sArr[i][j-1]= sArr[i][2]; /* set the last val in its new place*/
           sArr[i][2]= temp; /* set the last elem to the latest rewritten value*/

       }
    }

}
void printArr(char arr[][3], int size)
{
    int i = 0, j= 0;
    for(i = 0; i< size; ++i)
    {
        for(j = 0; j< 3; ++j)
        {
            printf("%c | ", arr[i][j]);
        }
        printf("\n");
    }
}

int main()
{
   char arr[2][3]= {{'a','b','c'},{'a','b','c'}};
   moveLettersInRow(arr, 2);
   printArr(arr, 2);
   return 0;
}

【讨论】:

    【解决方案2】:

    有几种方法可以解决这个问题。正如 Kami Cuk 和 Fred 指出的那样,一种方法是在复制时使用临时变量。

    另一种避免复制值的方法是在读取数组时使用模运算来索引数组。

    myArray[9][(index + offset) % numberOfElementsInArray]
    

    index 和 offset 都应该是正整数。 numberOfElementsInArray 是 myArray[9] 中的元素个数

    要使用正整数获得 -1 偏移量,请将偏移量设置为 numberOfElementsInArray - 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2021-11-23
      • 2014-08-25
      相关资源
      最近更新 更多