2016-11-24 25 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); 
} 

所以這是給「SI的類型不匹配的重聲明」從浮SI錯誤。

+3

你看過關於類型不匹配重新聲明錯誤的任何其他問題嗎? –

+1

put'float si(int a,int c,float b);'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

據我所知,有兩種類型的功能: 在行 - 功能被宣佈之前 原型 - 其中函數在後面提到 所以我跟着後者,那麼爲什麼它應該顯示錯誤 –

+1

@rokkopavka:因爲您正在編譯C90模式(而不是C99或C11),所以編譯器會將'si(a,c,b)'解釋爲對以前未聲明的函數的調用,其中包含未指定的參數列表和返回類型'int' - 有效'extern int si();'當你稍後將'si'定義爲返回'float'時,編譯器會抱怨defi nition與先前使用的隱式聲明不匹配。如果使用C99或C11模式進行編譯,則必須在使用它們之前聲明函數,或者可以在沒有原型的情況下定義「靜態」函數。 –

+1

@rokkopavka不,有_function declarations_和_function definitions_(實際功能)。在程序中調用函數的地方,必須通過位於源代碼文件中較高位置的函數聲明或函數定義而不是調用該函數的代碼來知道其格式。 – Lundin

1

當你調用

d = si(a,c,b); 

你的程序不知道的功能,因爲它是在底部事後定義。查找「前向聲明」來解決這個問題。另外,你使用變量't'但我看不到它的定義。

相關問題