Проблема в main()
Как указано Риши в их ответе , одна строка с ошибкой - это строка в main()
:
getVals(int ARRAYSIZE, int input[ARRAYSIZE]);
Это должно помешать компиляции вашего кода, потому что после завершения препроцессора строка гласит:
getVals(int 20, int input[20]);
Это вообще не является допустимым C - первый 20
является бессмысленной синтаксической ошибкой.
Если у вас есть что-то, что более или менее компилируется, например, одно из следующих:
getVals(int SIZE, int input[ARRAYSIZE]);
getVals(int SIZE, int input[SIZE]);
, тогда у вас есть объявление функции без возвращаемого типа.В соответствии с правилами C90, это не может появляться в середине функции.В соответствии с правилами C99 или более поздними, он может появляться там, где он есть, но он должен иметь тип возвращаемого значения -
int getVals(int SIZE, int input[ARRAYSIZE]);
int getVals(int SIZE, int input[SIZE]);
Первое из объявлений допустимо как в C90, так и в C99, хотя ARRAYSIZE
не имеет значения,Второе из объявлений действительно только в C99 или позже, потому что оно использует VLA (массив переменной длины).Они не существовали в C90.
Однако, поскольку это объявление, а не вызов функции, фактическая функция getVals()
никогда не вызывается, что является вашей заявленной проблемой.
Вы на самом делехочу:
int num = getVals(ARRAYSIZE, input);
Кроме:
Вы определили getVals()
, используя:
int getVals(int myVals[], int maxVals)
, поэтому вам действительно нужно позвонить:
getVals(input, ARRAYSIZE);
Проблемы с getVals()
Эта функция тоже беспорядок.Вы, вероятно, должны использовать что-то вроде:
int getVals(int myVals[], int maxVals)
{
int i;
for (i = 0; i < maxVals; i++)
{
printf("Please Enter up to 20 integers ");
if (scanf("%d", &myVals[i]) != 1)
return i;
if (myVals[i] <= 0)
return i;
nVals++;
}
return i;
}
Я сохранил nVals
в качестве глобальной переменной, но это действительно не нужно.Вы должны по возможности избегать глобальных переменных (переменных, определенных вне какой-либо функции).