Передача значений измененного массива обратно в основную функцию в C - PullRequest
2 голосов
/ 10 марта 2012

Извините, если название все еще неоднозначно.

Я делаю это задание для школы, и ниже приведены мои прототипы определенных функций, основная функция и функция change_array.этой программы позволяет пользователям вводить 5 разных чисел и храниться в массиве.Тогда функция change_array удваивает (умножает на 2) любые числа ниже 10, однако в настоящее время она не выполняет то, для чего предназначена.Я действительно застрял, поэтому мне было интересно, если кто-нибудь может указать на мои ошибки.Я не прошу точного ответа, мне просто нужно несколько указателей и указаний.

Что не так, так это то, что функция change_array не меняет значения, заданные пользователями.Так, например, если пользователь вводит «3, 5, 6, 12, 32», вывод моей программы по-прежнему «3, 5, 6, 12, 32».Но то, что я действительно хочу, это «6, 10, 12, 12, 32» после того, как массивы возвращены из функции change_array.код написан на C.

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Массивы всегда передаются по ссылке, так что это не проблема.Это работает, как и ожидалось, когда я добавляю функцию печати и дополнительную фигурную скобку.Можете ли вы предоставить минимальный рабочий пример (MWE), чтобы мы могли просто запустить код?(Я знаю, что это, вероятно, должен быть комментарий, но я не хочу комментировать 3 пункта)

1 голос
/ 10 марта 2012

Нет ничего плохого в change_array.Это действительно изменяет значения в массиве вызывающего.Вы используете неверную строку формата для вашего printf.Вам нужно использовать %f вместо %ld, поскольку это значения с плавающей запятой, а не целые числа.

1 голос
/ 10 марта 2012

Я изменил ваш код, чтобы сделать его минимальным образцом, и он отлично работает для меня :

  #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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...