【问题标题】:Passing modified array values back to main function in C将修改后的数组值传递回C中的主函数
【发布时间】:2012-03-09 20:11:09
【问题描述】:

对不起,如果标题仍然不明确。

我正在为学校做这个作业,下面是我定义的函数原型、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 编写的。

【问题讨论】:

  • change_array 确实修改了数组,以便调用者可以看到修改。你需要贴出真实的代码,最好是完整的程序。
  • 好的,新代码清楚地表明问题只是printf格式字符串。

标签: c arrays function


【解决方案1】:

数组总是通过引用传递,所以这不是问题。当我添加打印功能和额外的端花括号时,它按预期工作。您能否提供一个最小工作示例(MWE)以便我们可以运行代码? (我知道这可能应该是一个评论,但我还差 3 分才能发表评论)

【讨论】:

  • 既然您和 Als 都同意它可以工作,那么我认为可能是我的其他功能导致了不需要的输出。我会再次仔细研究我的工作。
【解决方案2】:

change_array 没有任何问题。它确实修改了调用者数组中的值。

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

【讨论】:

    【解决方案3】:

    我修改了您的代码以制作一个最小的示例,它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
    

    【讨论】:

    • 谢谢,正如我对 TSouthwick 所说,我认为可能是我的其他功能导致了不需要的输出。我会再次仔细研究我的工作。
    • 刚刚发布了我的整个程序。
    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 2019-10-19
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多