Программа на C, которая использует функции для чтения элементов массива, введенных пользователем, и их замены - PullRequest
0 голосов
/ 04 октября 2018

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

Привет всем, я удалил свой оригинальный код (не знаю, поощряется ли это, но только дляРади ясности).Спасибо за комментарии.Это был беспорядок, поэтому я хотел отредактировать и опубликовать свой обновленный код, но я не уверен, как отформатировать функцию swaparray под основной.По сути, я хочу, чтобы функция могла поменять значения в списке 1 и 2 при вызове, чтобы сделать это в основном.

#include<stdio.h>
void fillarray(int list[], int size);
void printarray(int list1[], int list2[]);
void swaparray(int list1[], int list2[], int size);

int main()
{
    int a[5], b[5];
    int size = 5;

    fillarray(a, size);
    fillarray(b, size);

    printf("List1 and List2 before the swap\n");
    printf("List1\t\t\t\List2\n");

    printarray(a, b);
    swaparray(a, b, size);

    printf("List1 and List2 before the swap\n");
    printf("List1\t\t\t\List2\n");

    printarray(a, b, size);

    return 0;
}
 //////FUNCTIONS////////

void fillarray(int list[], int size)
{
    printf("Please enter 5 values for the array\n");

    for (int i = 0; i < 5; i++)
    {
    scanf_s("%d", &list[i]);
    }
}

void printarray(int list1[], int list2[])
{
    for (int i = 0; i < 5; i++)
    {
        printf("%d\t\t\t %d", list1[i], list2[i]);

    }
}

void swaparray(int list1[], int list2[], int size)
{
    for (int i = 0; i < 5; i++)
    {

    }
}

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Я постараюсь помочь пошагово и объяснить, как можно заставить это скомпилировать и запустить, и постараюсь помочь вам понять, что происходит.

В строке 4 вы объявляете swap_array функция, которая в настоящее время принимает в качестве входных данных 3 переменные типа int.Однако вместо этого вы хотите передать массивы (чтобы вы могли поменять их местами) для первых двух параметров, используя нотацию [] (например, int array1[]).То же самое касается функции print_array чуть ниже.Вы также должны сделать это в определениях этих функций (в строках 21 и 34).

Давайте теперь рассмотрим основную функцию.В настоящее время вы создаете array в основной функции.Отлично.Все в порядке.Однако сразу после этого вы звоните swap_array с аргументами array1 и array2.Вы не объявили и не инициализировали эти две переменные в своей основной функции, поэтому ваша программа не знает, что делать.

Итак, что вам нужно сделать в main, это создать два массива, array1 и array2(аналогично тому, как вы делаете это для массива) и затем передаете их в функцию swap_array.

Наконец, вы вызываете print_array с аргументами print1 и print2.Опять же, эти переменные нигде не видны в вашей основной.Что именно вы хотите напечатать?Вы хотите напечатать два только что замененных массива: array1 и array2.Следовательно, это должны быть аргументы, которые вы вводите в функцию печати, а не print1 и print2.

Я думаю, вы путаетесь между разницей между параметрами и аргументами.В строках 3, 4, 5, 21, 34 и 47 вы объявили / определили функции.В этих функциях есть параметры.Эти параметры используются непосредственно в функции как часть ваших расчетов.Думайте о них как о «заполнителях» для реальных ценностей.Когда вы вызываете функцию (например, в main), вы можете установить значения этих параметров на то, что вам нужно (например, значение или значение переменной), и они называются аргументами (как вы делаете в строках 15, 16 и 17).

Надеюсь, это поможет.Вы должны быть в состоянии скомпилировать и запустить эти изменения.

0 голосов
/ 04 октября 2018

Предполагая, что под свопом вы имели в виду обратное, для выполнения вашей задачи я бы использовал стек, например так:

#include <stdio.h>  /* stderr, fprintf, printf */
#include <stdlib.h> /* malloc, abort, free */

int * stack;        /* stack array */

int main(void) {    /* remember about void! */
    int size, i;    /* variable holding size and stack pointer, could name it better */

    printf("Amount of elements:"); /* ask for amount of elements */
    scanf("%d", &size);            /* size now contains it */

    stack = malloc(sizeof(int) * size); /* allocate enough memory */

    if(!stack) {  /* succeed? */
        fprintf(stderr, "Out of memory."); /* no, print error */
        abort(); /* bail out */
    }

    for(i = 0; i < size;) { /* now, read stack */
        scanf("%d", &stack[i++]);
    }

    printf("Reversed:\n");

    for(i = size; i > 0;) { /* and print it from the back */
        printf("%d\n", stack[--i]);
    }

    free(stack);
}

Пожалуйста, не забудьте проверить ввод пользователя (я не включил его; это может бытьваше упражнение).

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