2014-09-20 3 views
0

я написал следующую программу C:Функция должна иметь ошибку прототип

#include<stdio.h> 
#include<stdlib.h> 
void main() 
{ 
    int count; 
    scanf("%d",&count); 
    if(count < 1 || count > 100) 
    { 
     exit(1); 
    } 
    int inputs[10]; 
    for(int i = 0; i < count; i++) 
    { 
     scanf("%d",&inputs[i]); 
     if(inputs[i] < 1 || inputs[i] > 30000) 
     { 
      exit(1); 
     } 
    } 
    for(i = 0; i < count; i++) 
    { 
     printPrimeFactor(inputs[i], 2); 
     printf("\n"); 
    } 
} 

void printPrimeFactor(int number, int factor) 
{ 
    if(number % factor == 0) 
    { 
     int flag = 1, newNumber; 
     newNumber = number; 
     for(int i = 0; i < factor/2; i++) 
     { 
      if(factor % i == 0) 
      { 
       flag = 0; 
       break; 
      } 
     } 
     if (flag) 
     { 
      printf("%d ", factor); 
      newNumber = number/factor; 
     } 
     factor++; 
     if(factor <= newNumber/factor) 
     { 
      printPrimeFactor(newNumber, factor); 
     } 
    } 
} 

И по компиляции (в окнах, турбо-C), я держу получить ошибку:

Function 'printPrimeFactor' should have a prototype error 

I не удалось найти никаких проблем с кодом. Что может быть проблемой?

+3

поставил 'аннулируются printPrimeFactor (INT число, Int фактор),' 'декларацию до main' –

+3

Почему вы до сих пор используют Turbo-C? Несколько компиляторов являются [бесплатное программное обеспечение] (http://fsf.org/) (например, [GCC] (http://gcc.gnu.org/) ....) и более стандартизированы, дают хорошую диагностику и оптимизируйте лучше. –

+0

Эта строка: int input [10]; должен быть int input [count]; поэтому код будет иметь правильный размер массива доступных слотов. – user3629249

ответ

4

Ваша функция вызывается до того, как компилятор видел его определение, так что компилятор говорит: «Я хочу видеть прототип этой функции первого».

Это значит, что перед вызовом функции вы положили void printPrimeFactor(int number, int factor);.

В качестве альтернативы вы можете поместить всю функцию (то есть ее определение) перед вызовом.

+0

@PiotrS. Проблема заключается в том, что, неявно предполагая, что она возвращает 'int', позже определяется как return' void'. Это ошибка в любом компиляторе C. Использование Turbo-C является проблемой по разным причинам; но не этот. Начиная с ISO C99, требуются декларации, но предварительные даты Turbo-C. – Clifford

1

Вы должны объявить printPrimeFactor() перед основным()

1

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

Итак, Добавить

void printPrimeFactor(int number, int factor); 

перед функцией main.

Также mainint не void.

+0

«main возвращает int not void», это C, а не C++ –

1

Когда компилятор встречает вызов printPrimeFactor() в main(), он еще не видел определение, поэтому необходимо предположить, что это функция возвращающая int, а также количество и типы параметров выводятся из аргументы, переданные вызову при первом обнаружении. В этом случае printPrimeFactor() не возвращает int. Когда определение встречается, компилятор обнаруживает разницу между сигнатурой определения и предполагаемой декларацией. Решение заключается в определении перед использованием или добавлении явного объявления прототипа перед использованием. Так, например, перед main() добавить:

void printPrimeFactor(int number, int factor) ; 

ANSI C89 и C90 ISO позволяют неявных декларации, C99 и C++ нет. Там действительно очень мало причин, почему вы должны использовать античный 16-битный компилятор. Не в последнюю очередь потому, что ни IDE, ни компилятор, ни генерируемый им код даже не будут запускаться на Win64.

0

Компилятор хочет видеть все функции, находящиеся в программе, до того, как он был вызван. Таким образом, вы либо пишете всю функцию до main, либо выдаете прототип функции до main и записываете функцию после main.

Итак, в приведенной выше программе функция «void printPrimeFactor (int number, int factor)» находится после main, поэтому вам нужно будет предоставить прототип функции. прототипом функции является не что иное, как полное имя функции, т.е.е

void printPrimeFactor(int number, int factor) 

Так программа должна прийти, как это

#include<stdio.h> 
#include<stdlib.h> 
void printPrimeFactor(int number, int factor) 
void main() 
{ 

 Смежные вопросы

  • Нет связанных вопросов^_^