在 C 中编辑函数内的数组和 return 数组到 main
Edit arrays within function and return array to main in C
我正在编写一个程序来为用户提供他们是否想要的选项:
- 将随机数添加到数组
- 打印数组
- 在数组中搜索元素
- 数组左移
这些必须在单独的函数中,它需要递归,直到用户想要完成它才会保持 运行 我的代码是:
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;
}
我正在编写一个程序来为用户提供他们是否想要的选项:
- 将随机数添加到数组
- 打印数组
- 在数组中搜索元素
- 数组左移
这些必须在单独的函数中,它需要递归,直到用户想要完成它才会保持 运行 我的代码是:
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;
}