2012-03-09 2 views
2

Извините, если заголовок все еще неоднозначен.Передача значений модифицированного массива обратно в главную функцию в C

Я выполняю это задание для школы, а ниже - мои прототипы определенных функций, основная функция и функция 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.

EDITED с полной программой:

#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.

+0

'change_array' действительно изменяет массив, чтобы модификация была видимой для вызывающего. Вам нужно опубликовать реальный код, желательно полную программу. –

+0

Только что отправил, спасибо. –

+0

ОК, новый код дает понять, что проблема - это просто строка формата printf. –

ответ

1

Там нет ничего плохого в change_array. Он действительно изменяет значения в массиве вызывающего.

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

+0

Большое спасибо! –

+0

Если этот ответ решает вашу проблему, тогда подумайте о его маркировке как принятой. –

2

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

+0

Поскольку вы и Als одобрили, что он работает, тогда я думаю, что это могут быть другие мои функции, которые вызывают нежелательный вывод. Я попытаюсь снова взглянуть на свою работу. –

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 
+0

Спасибо, как я сказал TSouthwick, я думаю, что это могут быть мои другие функции, которые вызывают нежелательный вывод. Я попытаюсь снова взглянуть на свою работу. –

+0

Только что отправил всю мою программу. –