Функция, которая возвращает одномерный массив и записывает результаты в текстовый файл - PullRequest
0 голосов
/ 11 ноября 2018

Меня попросили написать код, который берет 2, 1D массивы из текстового файла, добавить их и затем вернуть результаты в другой текстовый файл.Тем не менее, я все еще получаю ошибки об указателях.Я новичок в C и буду очень рад, если кто-нибудь сможет мне это объяснить.

int result(int a[], int b[])
{
  int *wsk = &c_tab[0];
  char choice;
  printf("0.Add\n1.Substract");
  scanf("%c", &choice);
  for (i=0; i<9; i++) {
    if (choice== '0')
    {
      *wsk = a[i] + b[i];
      wsk++;
    }
    else if (choice== '1')
    {
      *wsk = a[i] - b [i];
      wsk++
    }
  }
  return *wsk;
}

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

, так как вы используете глобальную переменную, тип возвращаемого значения должен быть недействительным (или какой-либо формой указания того, что вычисление выполнено. Это, в свою очередь, может быть простым возвращаемым значением -1 или w / e (я буду оставь эту часть на свое усмотрение).

int res[10]; // global variable

void add(int *a, int *b) // no return value, new array will be saved globally(not advisable)
{
    int sign = -1; // your +- check
    printf("0.Suma\n1.Roznica");
    scanf("%c", &sign);
    if (sign == 0)
    {
        for (int i = 0; i < 9; i++)
            res[i] = a[i] + b[i]; 
    }
    else if (sign == 1)
    {
        for (int i = 0; i < 9; i++)
            res[i] = a[i] - b[i]; 
    }
}

альтернативный способ сделать это - использовать a или b в качестве «возвращаемых» значений с простым изменением, например a[i] += b[i] -> теперь a имеет значение a + b. таким образом, вам не придется иметь дело с указателями, выходящими из области видимости и т. д. (документация о том, как вернуть указатели из функций (безопасным способом), здесь ).

0 голосов
/ 11 ноября 2018

Первая ошибка, которую я вижу, заключается в том, что вам нужно объявить тип функции с типом возвращаемого значения, в этом случае функция должна быть:

int *dzialanie(int a[], int b[]){
    ...
    return wsk;
}

Другая ошибка в цикле for, операция должна быть:

...
for (int i=0; i<9; i++){
    *(wsk + i) = a[i] + b[i];
}
...

То же самое для другого (смотрите, что вы не объявили i, который тоже является переменной).Другой способ, делает:

wsk[i] = a[i] - b[i];

То же самое.Если вы уже знаете размерность двух массивов, возможно, лучше взять аргументы в качестве указателей, это будет выглядеть следующим образом:

int dzialanie(int *a, int *b){
    ...
}  

И вам нужно будет выделить память, это может быть сделано с помощью malloc:

wsk = (int *)malloc(10*sizeof(int));

В конце вашей программы вы захотите освободить выделенную память, выполнив:

free(wsk);

Надеюсь, вы понимаете, мой английский плохой, я из Аргентины.Привет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...