Как передать массив из функции в функцию - PullRequest
1 голос
/ 05 апреля 2020

Итак, я довольно новичок в программировании в целом и работаю над проектом, в котором мне нужно создать пару функций. С первой функцией все в порядке, но я не могу понять, как передать значения из первой функции во вторую функцию. Я знаю, что мне нужно использовать некоторые указатели для решения проблемы, но мне было просто интересно, есть ли проще путь, пока я не овладею использованием указателей. Заранее спасибо!

Вот мой грязный код

     #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <malloc.h>
#define START_SIZE 2

int number_of_branches=0;
typedef struct
           {
              int Month_num[12];
              double sales[12];
              bool active;
           }Branch;
double function_one(void);
double function_two(void);
double function_three(void);
void function_four(void);



int main()
{
    int User_Selection;
    do
    {
    printf("1. Enter sales data.\n2. Add a record for a new branch.\n3. Delete record of an existing branch.\n4. Calculate total sales.\n5. Calculate percentage share of each branch.\n6. Determine the month of peak sales.\n7. Display sales of a specific month.\n8. Display sales of a specific branch.\n0. Done\n");
    scanf("%i",&User_Selection);

    switch (User_Selection)
    {
    case 0:
    {
        printf("Thankyou for your time :)\n");
        break;
    }

    case 1:
    {
        function_one();
        break;
    }

    case 2:
    {
        function_two();
        break;
    }
    case 3:
    {
        function_three();
        break;
    }
    case 4:
    {
        function_four();
        break;
    }
    default:
    {
        printf("Please enter a valid input :)\n");
        break;
    }
    }
    }
    while(User_Selection!=0);
}


double function_one(void)
{
    //FILE *file = fopen("Sales.csv","a");
    printf("Ender number of branches: ");
    scanf("%d",&number_of_branches);
    printf("\n");
        Branch Branches[number_of_branches];
        RecPointer r;
        r = (RecPointer)malloc(sizeof(Rec));
        //printf("%d",number_of_branches);
        for(int b=0; b<number_of_branches; b++)
        {
            printf("Sales for branch %d: \n",(b+1));
            for(int x=0;x<12;x++)
            {
                printf("Sales for month %d: ",(x+1));
                scanf("%lf",&Branches[b].sales[x]);
                //printf("\n%lf\n",Branches[b].sales[x]);
                //fprintf(file, "%d,%.2lf\n",x,Branches[b].sales[x]);
                //fprintf(file,"\n");
            }
            printf("\n\n");
        }
     //fclose(file);
     printf("Branch\\Month:\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12\n");
     for(int b=0; b<number_of_branches; b++)
        {
            printf("Branch %d:\t",(b+1));
            for(int x=0;x<12;x++)
            {
                printf("%.2lf\t",(Branches[b].sales[x]));

            }
            printf("\n");
        }
        return 0;
        Branch * Branchplace = (Branch *) malloc(sizeof(Branch));

}

double function_two(void)
{
    Branch Branches[number_of_branches++];
    printf("Sales for the new branch number %d\n",(number_of_branches));
    for(int x=0;x<12;x++)
{
                printf("Sales for month %d: ",(x+1));
                scanf("%lf",&Branches[number_of_branches].sales[x]);
                //printf("\n%d\n",x);
}
     printf("\n");
     printf("Branch\\Month:\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12\n");
     for(int b=0; b<number_of_branches; b++)
        {
            printf("Branch %d:\t",(b+1));
            for(int x=0;x<12;x++)
            {
                printf("%.2lf\t",(Branches[b].sales[x]));
                //printf("\n%lf\n",Branches[b].sales[x]);
                //fprintf(file, "%d,%lf",x,Branches[b].sales[x]);
            }
            printf("\n");
        }
         return 0;

}

double function_three(void)
{
    Branch Branches[number_of_branches];
    int deleted_branch;
    printf("Which branch do you want to delete?\n");
    scanf("%d",&deleted_branch);
    Branches[deleted_branch].active=false;
    printf("Deleted branch %d\n",deleted_branch);
    return 0;
}

void function_four(void)
{
Branch Branches[number_of_branches];

    for(int n=0;n<number_of_branches;n++)
    {
        for(int x=0;x<12;x++)
        printf("%.lf\n",Branches[n].sales[x]);
    }
}

1 Ответ

0 голосов
/ 05 апреля 2020

массив легко передать, указатель не нужен

  void myfunction(int array[]) {
       /**  your code here **/
      array[0] = 25;
  }

  void main() {
      int arr[] = {1, 2, 4, 5, 6};
      int i;
      myfunction(arr);
      for(i=0;i<4;i++) {
        printf("%d\n", arr[i]);
      }
  }

Вывод

  25
  2
  4
  5

Как вы можете видеть, значение 25 - это печать, которая фактически изменена внутри функции

...