Arduino C多维数组切换

时间:2019-01-03 10:57:23

标签: c arrays multidimensional-array

我被困在我的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]显然行不通

2 个答案:

答案 0 :(得分:0)

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

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

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

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

要获得带有正整数的-1偏移量,请将offset设置为numberOfElementsInArray-1

答案 1 :(得分:0)

赋值没有问题,但是必须先保存要写的元素。

在此示例中,所有重写的值都保留在每行的最后一个插槽中,这只是一个示例-如果您需要在行之间移动字母,则并非唯一的方法,其想法是相似的。

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