C- Помещение элементов массива в массив в функции - PullRequest
0 голосов
/ 16 мая 2018

Я совершенно новичок в написании кода и беру уроки программирования на Си.

Я пытаюсь написать программу, которая является банковским меню.У меня проблемы с помещением значений в массив через функцию.Я думаю, что последняя функция с указателем - это то, с чем я сталкиваюсь.Я ценю ответы, но я хочу быть в состоянии понять, что я сделал неправильно, и как я должен это распознать.

Также будет полезно любое улучшение, о котором вы только можете подумать.Спасибо!

*** Также обратите внимание, что весь код не полный.Мне нужно исправить эту одну часть, чтобы иметь возможность писать другие, поэтому я застрял здесь.

 //
//  main.c
//  HMenuFunctionArray
//
//  Created by Yasmin on 5/13/18.
//  Copyright © 2018 Yasmin Hosein. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define DEPOSIT 5

void choiceG(unsigned (*array[DEPOSIT]));

int main() {

char choice;
int sum, maxim, minim, aver = 0;
int count;
int array[DEPOSIT];


do {
printf("\nChoose an option from the menu below:\n");
printf( "\tG\t-\t" );
printf("Get a new deposit\n");
printf( "\tS\t-\t" );
printf("Sum of all deposits\n");
printf( "\tD\t-\t" );
printf("Deposits to be displayed from highest to lowest\n");
printf( "\tA\t-\t" );
printf("Average of all deposits\n");
printf( "\tL\t-\t" );
printf("Lowest deposit will be displayed\n");
printf( "\tQ\t-\t" );
printf("Quit the program\n");

printf("\nYour choice (please use uppercase): ");
scanf("%c", &choice);

switch (choice) {
    case 'G':
    choiceG (&array[DEPOSIT]);
        break;
    case 'S':
        printf( "G");
        break;
    case 'D':
        printf( "G");
        break;
    case 'A':
        printf( "G");
        break;
    case 'L':
        printf( "G");
        break;
    case 'Q':
        break;
    default:
        printf("Incorrect menu option selected.\n");
    }
   }
   while (choice != 'Q') ;
   }

void choiceG (unsigned *array[DEPOSIT]) {
int a[5] = { 0 };
int i, j = 0;

for(i = 0; i < DEPOSIT; ++i ){

printf("Deposit # %d - $",i);

scanf("%d",*a+i);}

printf("Your deposit amounts are: $ ");

for(j = 0; j < DEPOSIT ; j++)

printf("%p  ", (void *) &a[j]);

 return ;
        }

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Было несколько небольших проблем с кодом:

  • Форматирование имеет значение, поскольку оно улучшает читабельность.
  • Массив - это не что иное, как указатель на первый элемент в массив, так что достаточно передать имя массива.

Таким образом, когда вы определяете функцию, которая принимает массив, достаточно просто передать указатель на тип данных. например функция, которая принимает массив целых чисел, может быть объявлена ​​так:

void functionThatTakesAnArrayOfInts(int *array);

Если вы хотите получить доступ к элементу в этом массиве, вы можете просто сделать:

array[index]

И если вам нужен указатель на этот индекс в массиве, вы можете просто сделать:

&array[index]

Запускается приведенный ниже код.

//
//  main.c
//  HMenuFunctionArray
//
//  Created by Yasmin on 5/13/18.
//  Copyright © 2018 Yasmin Hosein. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define DEPOSIT 5

void choiceG(int *array);

int main() {
  char choice;
  int sum, maxim, minim, aver = 0;
  int count;
  int array[DEPOSIT];

  do {
    printf("\nChoose an option from the menu below:\n");
    printf( "\tG\t-\t" );
    printf("Get a new deposit\n");
    printf( "\tS\t-\t" );
    printf("Sum of all deposits\n");
    printf( "\tD\t-\t" );
    printf("Deposits to be displayed from highest to lowest\n");
    printf( "\tA\t-\t" );
    printf("Average of all deposits\n");
    printf( "\tL\t-\t" );
    printf("Lowest deposit will be displayed\n");
    printf( "\tQ\t-\t" );
    printf("Quit the program\n");
    printf("\nYour choice (please use uppercase): ");
    scanf("%c", &choice);

    switch (choice) {
      case 'G':
        choiceG (array);
        break;
      case 'S':
        printf( "G");
        break;
      case 'D':
        printf( "G");
        break;
      case 'A':
        printf( "G");
        break;
      case 'L':
        printf( "G");
        break;
      case 'Q':
        break;
      default:
        printf("Incorrect menu option selected.\n");
    }
  }
  while (choice != 'Q');
}

void choiceG (int *array) {
  int a[5] = { 0 };
  int i, j = 0;

  for(i = 0; i < DEPOSIT; ++i ) {
    printf("Deposit # %d - $",i);
    scanf("%d", &a[i]);
  }

  printf("Your deposit amounts are: $ ");

  for(j = 0; j < DEPOSIT ; j++) {
    printf("%d  ", a[j]);
  }

 return ;
}

Надеюсь, это поможет!

0 голосов
/ 16 мая 2018
int array[DEPOSIT];

Создает массив int.ОК.

choiceG(&array[DEPOSIT]);

Передает адрес int в index = DEPOSIT.Однако это неверный индекс.Допустимые значения: 0 to DEPOSIT-1.Это должно быть:

choiceG(array);

Это передаст массив, а не только один его элемент.Далее

void choiceG(unsigned (*array[DEPOSIT]));

Я думаю, что вы хотите передать массив, так что это должно быть просто

void choiceG(int array[DEPOSIT]);

Наконец:

void choiceG(int array[DEPOSIT])
{
    int a[5] = { 0 };  // What is this for?
    int i, j = 0;

    // Get all the deposits from the user
    for(i = 0; i < DEPOSIT; ++i ){
        printf("Deposit # %d - $", i);
        scanf("%d", &array[i]); // Scan directly into the array
    }

    // Print all the deposits just entered
    printf("Your deposit amounts are: $ ");
    for (j = 0; j < DEPOSIT ; j++) {
        printf("%d  ", array[j]);  // Print the int value
    }
    printf("\n");   // Flush stdout

    return ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...