在 C 中编辑函数内的数组和 return 数组到 main

Edit arrays within function and return array to main in C

我正在编写一个程序来为用户提供他们是否想要的选项:

  1. 将随机数添加到数组
  2. 打印数组
  3. 在数组中搜索元素
  4. 数组左移

这些必须在单独的函数中,它需要递归,直到用户想要完成它才会保持 运行 我的代码是:

int main()
{
    int array[M][N];
    int ans;

    puts("Please enter what you would  like to do:\n
            1: Create an array with random values\n
            2: Print Array\n
            3: Search for a number in an array\n
            4: Shift each value to the left");
    scanf("%d",&ans);
    switch(ans) {
        case 1:
            PopulateRandom2D(array);
            break;
        case 2:
            PrintArray(array);
            break;
        case 3:
            LinearSearch2D(array);
            break;
        case 4:
            LeftShift(array);
            break;
        default:
            puts("Goodybye");
            return 0;
    }
    main();
    return 0;
}

void PopulateRandom2D(int array[][N])
{
    int r,c;
    srand(time(NULL));

    for(r = 0; r < M; r++) {
        for(c = 0; c < N; c++) {
            array[r][c] = 1 + (rand() % (M * N));
        }
    }
}

调用该函数后,我需要用户输入另一个命令并调用与用户输入不同的函数。我一直在试验,首先点击 1,这样它就用数字填充数组,然后点击 2,这样它就有希望打印出该数组,但我得到的只是数组中的大量数字。我认为该函数没有正确编辑 main 中的数组,因此 main 没有获得具有随机值的数组,但我该如何解决这个问题?

下面的代码有效:

#include "stdafx.h"
#include <stdlib.h>
#include <time.h>

const int M = 10;
const int N = 20;

void PrintArray(int array[][N]) {}
void LinearSearch2D(int array[][N]) {}
void LeftShift(int array[][N]) {}
void PopulateRandom2D(int array[][N])
{
    int r, c;
    srand(time(NULL));

    for (r = 0; r < M; r++) {
        for (c = 0; c < N; c++) {
            array[r][c] = 1 + (rand() % (M * N));
        }
    }
}


int main()
{
    int array[M][N];
    int ans;

    while (true)
    {
        puts("Please enter what you would  like to do:"
            "\n1: Create an array with random values"
            "\n2: Print Array"
            "\n3: Search for a number in an array"
            "\n4: Shift each value to the left"
            "\n5: Quit");
        scanf("%d", &ans);
        switch (ans) {
        case 1:
            PopulateRandom2D(array);
            break;
        case 2:
            PrintArray(array);
            break;
        case 3:
            LinearSearch2D(array);
            break;
        case 4:
            LeftShift(array);
            break;
        default:
            puts("Goodybye");
            return 0;
        }
    }
    return 0;
}

其他的功能就交给你了

您当前正在递归调用 main()。在调用 main() 的每次迭代中,您将在堆栈上创建一个新数组。

这不是你想要的。

相反,将您的代码包装在 while(true) { ... } 循环中。它看起来像这样:

#include <stdbool.h>

int main()
{
    int array[M][N];
    int ans;

    while (true) {
        puts("Please enter what you would  like to do:\n
                1: Create an array with random values\n
                2: Print Array\n
                3: Search for a number in an array\n
                4: Shift each value to the left");
        scanf("%d",&ans);
        switch(ans) {
            case 1:
                PopulateRandom2D(array);
                break;
            case 2:
                PrintArray(array);
                break;
            case 3:
                LinearSearch2D(array);
                break;
            case 4:
                LeftShift(array);
                break;
            default:
                puts("Goodybye");
                return 0;
        }
    }
    return 0;
}