在函数内编辑数组并将数组返回到C中的main

时间:2015-02-04 01:03:01

标签: c arrays recursion

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

  1. 将随机数添加到数组
  2. 打印阵列
  3. 搜索数组中的元素
  4. 左移阵列
  5. 这些必须是单独的函数,它需要递归,直到用户想要完成它继续运行我的代码是:

    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不会使用随机值获取数组,但我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

以下代码有效:

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

我留给你填写其他功能。

答案 1 :(得分:1)

您目前正以递归方式呼叫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;
}