什么是c中函数的类型不匹配重新声明?

时间:2016-11-24 04:34:28

标签: 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);
 }

因此,这会给出&#34;类型不匹配重新声明si&#34;作为来自浮动的错误。

2 个答案:

答案 0 :(得分:2)

首先,这个片段

printf("Enter time:");
scanf("%d", &t);
由于你没有将t声明为整数,所以

不应该工作,所以只需在上面的行上声明t就像这样。

int a, c, t;

您也没有在si函数中声明任何变量。当您传递c变量时,它永远不会被初始化。

什么有助于您的类型不匹配错误是si函数的前向声明。

通过将行float si(int a, int c, float b);添加到程序的顶部(在main之上),您可以让编译器知道函数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);
}

答案 1 :(得分:1)

致电时

d = si(a,c,b);

你的程序不知道该函数,因为它后面是在底部定义的。查找“前向声明”以解决此问题。另外,你使用变量't'但我看不到它的定义。