C函数,使用函数读取用户输入的数组元素,然后交换它们

时间:2018-10-04 18:51:43

标签: c arrays function

我目前正在学习C语言入门入门课程,因此我的大部分学习都来自于留言板和在线资源。我在输出代码时遇到麻烦,我认为问题出在我的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 :(得分:0)

我将尝试逐步提供帮助,并说明如何将其编译和运行,并尝试帮助您了解正在发生的事情。

在第4行,您要声明swap_array函数,该函数当前将3个int变量作为输入。但是,您想使用[]表示法(例如int array1[])为前两个参数传递数组(以便您可以交换它们)。下方的print_array函数也是如此。您还需要在这些函数的定义中执行此操作(第21和34行)。

现在让我们看一下主要功能。您当前正在主要功能中创建array。大。没关系。但是,紧接着,您将使用参数swap_arrayarray1调用array2。您尚未在主函数中声明和初始化这两个变量,因此您的程序不知道该怎么做。

因此,您主要需要做的是创建两个数组array1array2(类似于您对数组的处理方式),然后将它们输入swap_array函数中。

最后,您正在使用参数print1print2调用print_array。同样,这些变量在您的主目录中无处可见。您到底要打印什么?您要打印刚刚交换的两个数组:array1array2。因此,这些必须是您输入到打印函数中的参数,而不是print1print2

我认为您对参数和参数之间的区别感到困惑。在第3、4、5、21、34和47行上,您已经声明/定义了函数。这些功能是参数。这些参数在函数中直接用作计算的一部分。将它们视为真正价值的“占位符”。调用函数时(例如在main中),可以将这些参数值设置为所需的值(例如value或变量的值),这些参数称为参数(如在第15、16和17行中所做的那样)。

我希望这会有所帮助。您应该能够编译并运行这些更改。

答案 1 :(得分:-1)

假设交换意味着反向,要完成任务,我将使用堆栈,如下所示:

#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);
}

请记住要验证用户的输入(我没有包括在内;这可能是您的练习)。