【问题标题】:Array Manipulation Menu C Programming数组操作菜单 C 编程
【发布时间】:2015-07-17 13:20:10
【问题描述】:

我有一个菜单,用户必须在其中输入一个数字,以下情况将对数组进行操作。但是菜单必须按顺序完成。例如,用户必须首先设置数组的大小,然后将元素传递到单独模块中的数组中。

  1. 1- 输入数组的大小 2- 输入数组元素 3- 排序 数组 4- 在数组中查找一个数字 5- 打印数组
    6-反向打印数组 7-退出

请输入您的选择:3 您的数组尚未初始化!

到目前为止,这是我的代码。我在初始化数组和输入元素时遇到问题。一旦我完成了这些,我相信我可以做剩下的:

int sizeArray();
int *enterElements(int size, int *anArray);


int main(){
    int choice; 
    int tempSize;
    int mArray[100]; //initialize the Array
    do{
        printf("1 - Enter the size of the array\n");
        printf("2 - Enter the array elements\n");
        printf("3 - Sort the array\n");
        printf("4 - Find a number within the array\n");
        printf("5 - Print the Array\n");
        printf("6 - Reverse print the array\n");
        printf("7 - Quit\n");
        printf("\n");
        printf("Please Enter your choice: ");
        scanf("%d", &choice);

        switch (choice){
        case 1:
            int tempSize = sizeArray(); 
        case 2: 
            if (tempSize != 0){
                enterElements(tempSize); 
            }
            else{
                printf("You should first set the size of the array\n"); 
            }
        default:
            if (choice < 1 || choice > 7)
                printf("Invalid choice please choose again\n");
        };
    } while (choice != 7);

}

int sizeArray(){
    int size = 0; 
    printf("What is the size of your array(1-20)? "); 
    scanf_s("%d", size); 
    if (size > 20 || size < 1){
        printf("Array size should be between 1 and 20 "); 
    }
    return size; 
}

int *enterElements(int size){
    int i = 0; 
    for (i = 0; i < size; i++)
    {
        printf("Enter Array Element %d :", i);
        scanf_s("%d", &anArray[i]); 
    }
}

【问题讨论】:

  • int tempSize = sizeArray(); :删除int,在此之后添加break;
  • 请不要破坏您的问题;该代码与回答此问题相关。

标签: c menu switch-statement case


【解决方案1】:

我认为 enterElements 函数应该是这样的:

void enterElements(int *anArray, int size)
{
 //Your code here
}

并将您的函数称为:

enterElements(mArray, tempSize);

在你不应该声明新的 int tempSize 变量的情况下,它会覆盖循环之前的那个。

【讨论】:

  • 如果我在 enterElements 方法之外初始化了数组,我不是已经设置了数组的大小了吗?
  • 当你定义数组时,你设置它的大小。正是你在堆栈上为它分配空间。请记住,在 c 中没有内置的数组大小控制。要使用一些起始值进行初始化,您可以执行以下操作:int mArray[100]={0};。这将初始化整个数组。
  • 因此,如果我在主方法中使用 mArray[100] 初始化数组,然后我在另一个模块中设置它的大小,我是否会更改数组的大小?
  • 使用 mArray[100] 定义一个表,而不是初始化它。但基本上是的,在这里你告诉你的编译器你的数组有多大。设置 tempSize 变量的那一刻,您不会更改实际的数组大小,但您可以使用此变量来控制对数组的访问。
【解决方案2】:

你有以下错误:

  1. 在switch语句中使用tempSize变量之前删除int
  2. 在原型中,您声明 enterElements 函数接受 2(!) 个参数并返回一个指针。但是在函数实现中,你只有一个参数,没有返回值。

【讨论】:

  • 我意识到了这些错误。我只是不知道如何初始化数组以便用元素填充它。
  • 我只是使用了不同的函数scanf("%d", &amp;size);scanf("%d", &amp;anArray[i]);
  • 我在该函数之外初始化该数组。当我这样做时,我会改变数组的大小吗?
  • 没有。数组的大小在这一行设置int mArray[100];并自动初始化为0。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 2021-03-16
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2015-02-22
相关资源
最近更新 更多