将修改后的数组值传递回C中的main函数

时间:2012-03-09 20:11:09

标签: c arrays function

很抱歉,如果标题仍然含糊不清。

我正在为学校做这个任务,下面是我定义的函数原型,main函数和change_array函数。

该程序的总体目标是允许用户输入5个不同的数字并存储到数组中。然后,change_array函数所做的是将任何低于10的数字加倍(乘以2),但是,它目前没有按照预期的方式执行。我真的被卡住了,所以我想知道是否有人可以指出我的错误。我不是要求一个确切的答案,我只需要一些指示和指导。

出错的是change_array函数没有改变用户给出的任何值。因此,例如,如果用户输入“3,5,6,12,32”,则我的程序的输出仍然是“3,5,6,12,32”。但是我真正想要的是,在从change_array函数传回数组之后,“6,10,12,12,32”。

用完整的程序编辑:

#include <stdio.h>
#define SIZE 5
void fill_array(double x[], int s);
void change_array(double x[], int s);
void print_array(double x[], int s);

main()
{
    double x[SIZE];

    fill_array(x, SIZE);
    printf("The array is as: \n");
    print_array(x, SIZE);
    change_array(x, SIZE);
    printf("After change, the array is: \n");
    print_array(x, SIZE);
}

void fill_array(double x[], int s)
{
    int i=0;

    printf("Please input 5 Non-Negative double numbers\n");
    for (i=0; i<s; i++) {
        printf("Number %d: ", i+1);
        scanf("%d", &x[i]);
        printf("\n");
    }
}

void change_array(double x[], int s)
{
    int i=0;

    for (i=0; i<s; i++) {
        if (x[i] < 10) {
              (x[i] = (x[i] * 2));
        }
    }
}

void print_array(double x[], int s)
{
    int i=0;

    for (i=0; i<s; i++) {
        printf("%ld \t", x[i]);
    }
    printf("\n");
}

我的代码是用C语言编写的。

3 个答案:

答案 0 :(得分:2)

数组总是通过引用传递,因此这不是问题。当我添加打印功能和额外的大括号时,它按预期工作。你能提供一个最小的工作示例(MWE),以便我们可以运行代码吗? (我知道这可能应该是一个评论,但是我能够评论3分了)

答案 1 :(得分:1)

我修改了您的代码以制作最小样本并且 works fine for me

  #include <stdio.h>
  #define SIZE 5
  void change_array(double x[], int s);


   int main()
   {
        double x[SIZE] = {3, 5, 6, 12, 32};
        printf("The array is as: \n");
        for(int i = 0;i<SIZE;i++)
            printf("\n%f",x[i]);

        //fill_array(x, SIZE);

        //print_array(x, SIZE);
        change_array(x, SIZE);
        printf("After change, the array is: \n");
        for(int i = 0;i<SIZE;i++)
            printf("\n%f",x[i]);
        // print_array(x, SIZE);
        return 0;
    }


    void change_array(double x[], int s)
    {
        int i=0;

        for (i=0; i<s; i++) 
        {
            if (x[i] < 10) 
            {
                 (x[i] = (x[i] * 2));
            }
        }
    }

这是输出:

  

数组如下:

3.000000
5.000000
6.000000
12.000000
32.000000
  

更改后,数组为:

6.000000
10.000000
12.000000
12.000000
32.000000

答案 2 :(得分:1)

change_array没有错。它确实修改了调用者数组中的值。

问题在于打印功能print_array。您使用的printf格式字符串格式错误。您需要使用%f而不是%ld,因为它们是浮点值而不是整数。