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