2016-11-24 4 views
-2

Это мой код для простого интереса, используя функцию: -Что такое несоответствие типа функции в c?

#include<stdio.h> 
#include<conio.h> 

void main() 

{ 
    int a,c; 
    float b,d; 

    printf("Enter principle value :"); 
    scanf("%d", &a); 
    printf("Enter rate :"); 
    scanf("%f", &b); 
    printf("Enter time:"); 
    scanf("%d", &c); 

    d=si(a,c,b); 
    printf("The simple interest is %f", d); 
    getch(); 
} 
float si(int a, int c, float b) 
{ 
    float f; 
    f=(p*t*r/100); 
    return(0); 
} 

Так что это дает «несоответствие типов переопределение си» как ошибка из поплавковой си.

+3

Просмотрели ли вы какие-либо другие вопросы о ошибках повторной разметки типа несоответствия? –

+1

put 'float si (int a, int c, float b);' before 'int main (void)'. Также 'scanf ("% d ", &t);' typo as' scanf ("% d", &c);? ' – BLUEPIXY

+1

где переменная' t'? –

ответ

2

Прежде всего, это фрагмент

printf("Enter time:"); 
scanf("%d", &t); 

не должны работать, как вы не объявили t как целое, так что просто объявить t на линии выше, как таковой.

int a, c, t;

Вы также не объявляли какие-либо переменные в вашей si функции. Когда вы передаете переменную c, она никогда не инициализируется.

Что поможет вашей ошибке несоответствия типа является прямым объявлением функции si.

Добавив строку float si(int a, int c, float b); в начало вашей программы (выше основной), вы даете компилятору понять, какой тип функции si есть, а также какие аргументы ожидать.

Вот моя лучшая попытка исправить код:

#include <stdio.h> 
#include <conio.h> 

float si(int a, int c, float b); 

float si(int a, int c, float b){ 
    float f; 
    f=(a*b*c/100); 
    return f; 
} 

void main(){ 
    int a, c; 
    float b, d; 

    printf("Enter principle value :"); 
    scanf("%d", &a); 
    printf("Enter rate :"); 
    scanf("%f", &b); 
    printf("Enter time:"); 
    scanf("%d", &c); 

    d = si(a,c,b); 
    printf("The simple interest is %f", d); 
} 
+0

Насколько я знаю, существуют два типа функций: В строке - где функция объявлена ​​до Прототип - где функция упоминается позже , поэтому я следовал за последним, то почему он должен показывать error –

+1

@rokkopavka: Поскольку вы компилируете в режиме C90 (не C99 или C11), ваш компилятор интерпретирует 'si (a, c, b)' как вызов ранее не объявленной функции с неопределенным списком аргументов и возвращаемым типом 'int' - эффективно' extern int si(); '. Когда вы позже определяете' si' как возвращающий 'float', компилятор жалуется, что defi nition не совпадает с неявным объявлением, используемым ранее. Если вы компилируете в режиме C99 или C11, вам необходимо объявить функции перед их использованием или вы можете определить функцию 'static' без предварительного прототипа. –

+1

@rokkopavka Нет, есть _function declarations_ и _function definitions_ (фактическая функция). В тот момент, когда функция вызывается в программе, ее формат должен быть известен, либо через объявление функции, либо определение функции, расположенное выше в файле исходного кода, чем код, вызывающий эту функцию. – Lundin

1

Когда вы звоните

d = si(a,c,b); 

ваша программа не знает этой функции, так как она была определена впоследствии в нижней части. Посмотрите на «предварительную декларацию», чтобы исправить это. Кроме того, вы используете переменную 't', но я не могу ее определить.