2016-11-02 8 views
0

Я продолжаю получать пять ошибок в моем коде, которые говорят об ошибке: ожидаемое выражение при обсуждении переменных в моей функции. Я просмотрел этот сайт и другие места, но я не могу найти, что не так.C: Я продолжаю получать ошибки, которые говорят об ошибке: ожидаемое выражение

Вот код:

#include <stdio.h> 

#define TRUE 1 
#define FALSE 0 

void separate_digits (long int n); 
void print_array (int a[10]); 
int digits_different (int a[10]); 
int divisible (int a[10], int n); 

int main() 
{ 
    long int n; 

printf("Enter a positive integer or 0 (zero) to end:"); 
scanf("%ld\n", &n); 

while (n != 0) 
{ 
    if (n < 0) 
    { 
     printf("Wrong input\n"); 
    } 

    else 
    { 
     separate_digits (long int n); 
    } 

    printf("Enter a positive integer or 0 (zero) to end:"); 
    scanf("%ld\n", &n); 
} 

printf("*** Program Terminated ***\n"); 

} 

void separate_digits (long int n) 
{ 
    int a[10] = {0}; 
    int digit; 
    int num = n; 

while (num > 0) 
{ 
    digit = num % 10; 

    ++a[digit]; 

    num = num/10; 
} 

print_array (int a[10]); 

if (a[0] != 0) 
{ 
    printf("Wrong input for the second part.\n"); 
    printf("Input should not contain zero.\n"); 
} 

else if (digits_different (int a[10]) == FALSE) 
{ 
    printf("Wrong input for the second part.\n"); 
    printf("Input should not contain each digit more than once.\n"); 
} 

else if (divisible (int a[10], int n) == FALSE) 
{ 
    printf("%1ld is not divisible by its digits.\n", n); 
} 

else 
{ 
    printf("%1ld is divisible by its digits.\n", n); 
    } 
} 

void print_array (int a[10]) 
{ 
int i; 

printf("\n\n\n"); 
printf("Digits:   0 1 2 3 4 5 6 7 8 9\n"); 
printf("Occurrences: "); 

for (i = 0; i < 10; i++) 
{ 
    printf("a[i] "); 
} 
} 

int digits_different (int a[10]) 
{ 
int i; 

for (i = 0; i < 10; i++) 
{ 
    if (a[i] > 1) 
     return FALSE; 

    else 
     return TRUE; 
} 
} 

int divisible (int a[10], int n) 
{ 
int i; 
int num; 

for (i = 0; i < 10; i++) 
{ 
    if (a[i] == 0) 
     continue; 
    else if (num % i != 0) 
     return FALSE; 
} 

return TRUE; 
} 

Вот ошибки я получаю:

Lab_Assignment_6_Sarah_H.c:27:21: error: expected expression 
     separate_digits (long int n); 
            ^
Lab_Assignment_6_Sarah_H.c:53:16: error: expected expression 
     print_array (int a[10]); 
       ^
Lab_Assignment_6_Sarah_H.c:61:31: error: expected expression 
     else if (digits_different (int a[10]) == FALSE) 
           ^
Lab_Assignment_6_Sarah_H.c:67:24: error: expected expression 
     else if (divisible (int a[10], int n) == FALSE) 
         ^
Lab_Assignment_6_Sarah_H.c:67:35: error: expected expression 
     else if (divisible (int a[10], int n) == FALSE) 
+3

Вам не нужно передавать тип параметра 'separate_digits (long int n);' -> 'separate_digits (n);' –

+0

вашей функции 'main' отсутствует оператор return, а' int main() '- плохая форма, используйте' int main (void) 'или' int main (int argc, char ** argv) 'вместо –

ответ

1

Вы не должны предваряя переменные с именем типа, когда вы на самом деле передать их функции.

Это необходимо только в объявлениях для этих функций, как вы это сделали в верхней части кода.

0

separate_digits (long int n); не является синтаксически правильным. Это путает компилятор.

Отбросьте long int дать separate_digits (n);

1

Синтаксис вызова функции принимает только имя переменной, а не тип.

separate_digits (long int n); 

должен быть

separate_digits (n); 

Кроме того, print_array (int a[10]); не так, вам нужно только передать имя массива, чтобы передать массив, как

print_array (a); 

и так далее.

Связанные со ссылкой C11, глава §6.5.2.1, Postfix операторы, вызов функции Синтаксис

postfix-expression (argument-expression-listopt)

и

argument-expression-list:
assignment-expression
argument-expression-list , assignment-expression

там, "тип"не быть упомянутый в списке аргументов, составляет

An argument may be an expression of any complete object type.

Другими словами, каждый элемент в списке аргументов должен иметь тип, который не должен быть , написанный.