Функция «Array» препятствует правильной работе программы

#c #arrays #function #pointers

#c #массивы #функция #указатели

Вопрос:

Моя функция не работает должным образом. Программа запускается, но когда она попадает в цикл for, функция не работает и останавливает программу, даже если предполагается, что она продолжает цикл. Если бы вы могли, пожалуйста, проверить мою функцию массива и сказать мне, есть ли что-то, что я не понимаю или делаю правильно.

Спасибо за ваше время.

Я точно знаю, что цикл не является проблемой, потому что, когда я удаляю функцию, она работает нормально. Я также попытался поместить ‘b’ в параметр массива функций, например, «int Array (int a[b], int b, int c);»

 #include <stdio.h>
#include <stdlib.h>

/*Function*/

int Array(int a[], int b,  int c);

/*Main Program*/
int main()

{

int S, C, *A, *B;
printf("How Many Numbers Would You Like in Array A and B? ");
scanf("%dn", amp; S);

/*For Loop Asking The User to Enter a Value and using the Array function to calculate/store the B[] Value*/
for (C=0; C<=S;   C){
    printf("nWhat is A[%d]  ", C);
    scanf("%d", amp; A[C]);
    B[C] = Array(A, S, C);
    }
}


/*Function*/    
int Array(int a[], int b, int c)
{
if (a[c] < 0){
        return a[c] * 10;

    } else {
        return a[c] * 2;

                }
}

  

Ожидаемые результаты:

  • Программа просит пользователя ввести размер массива, который будет использоваться для * A и * B

  • Программа использует цикл for, чтобы попросить пользователя ввести значение для каждой позиции в массиве * A, используя это значение для вычисления значения для каждой соответствующей позиции B.

Фактические результаты:

  • Программа просит пользователя ввести размер массива, который будет использоваться для * A и * B

  • Программа использует цикл for, чтобы попросить пользователя ввести значение для каждой позиции в массиве * A, программа запрашивает у пользователя одно значение, а затем прекращает работу.

Комментарии:

1. Вы должны добавить fflush(stdout); после печати вашего приглашения перед scanf , чтобы принудительно отобразить приглашение (поскольку оно не заканчивается новой строкой).

2. Чувак, тебе нужны лучшие имена переменных… Что делать A и B на что указывать? Вы никогда не инициализируете их перед началом использования.

Ответ №1:

Вы не выделяете никакой памяти для массива A. Вы просто объявляете его как указатель на int, затем начинаете записывать в него значения, которые отправляются в некоторую случайную ячейку памяти. После первого scanf, который получает S, вам необходимо назначить A = malloc(S * sizeof(int)) , прежде чем обращаться к нему.

Комментарии:

1. Спасибо за ваш ответ. Я добавил эту строку, и она все еще не работает должным образом. Я понимаю, что вы говорите, есть ли другой способ его инициализации?

2. Вероятно, есть и другие ошибки; это было просто наиболее очевидным. Хороший отладчик, безусловно, поможет.

3. @Beginner — вам также необходимо выделить память для B этого B = malloc(S * sizeof(int))

4. Спасибо за ответ вам обоим. @RishikeshRaje я действительно сделал это, и это все еще не сработало. В итоге я инициализировал размер массива, и это сработало, так что, возможно, мой компилятор не поддерживает malloc? Пример: A[99999], B [99999]. и это сработало, поэтому я предполагаю, что это компилятор, но я новичок, поэтому я, вероятно, говорю глупости

5. С вашим компилятором все в порядке. Пройдет не менее 2 лет, прежде чем вам даже разрешат так думать. Скорее всего, вы делаете что-то вроде выделения 10 элементов и доступа к 11-му.