簡體   English   中英

將修改后的數組值傳遞回C中的主函數

[英]Passing modified array values back to main function in C

抱歉,標題仍然不清楚。

我正在為學校做這項作業,下面是我定義的函數原型,主要函數和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編寫的。

數組總是通過引用傳遞的,所以這不是問題。 當我添加打印功能和多余的花括號時,它可以按預期工作。 您能否提供一個最小的工作示例(MWE),以便我們可以運行代碼? (我知道這可能是一條評論,但是我無法發表評論了3分)

我修改了您的代碼以制作最小的示例,它對我來說很好用

  #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

change_array沒有任何問題。 實際上,它確實修改了調用方數組中的值。

問題出在打印函數print_array 您為printf使用了錯誤的格式字符串。 您需要使用%f而不是%ld因為它們是浮點值而不是整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM