3
#include <stdio.h>

void simpleInterest (double Princ, double Rate, int Time)
{
      double value;
      value = Princ*Rate*Time;
      return value;
}

int main (int argc, char*argv[])
{
      printf("the value is %d", simpleInterest (100,0.01,5))
}

我似乎找不到我的代码有什么问题,实际上我是今天才开始接触 c 的新手,我收到一个错误代码:

simpleInterest:带有值的警告返回,在返回 void 的函数中 [默认启用]

这实际上是什么意思?我的代码实际上有什么问题?

4

3 回答 3

3

具有返回类型的函数void不返回任何内容。

void simpleInterest (double Princ, double Rate, int Time)  
  ^
  |
Return type void

你正在返回一个doubletype value
要返回一个double类型,你的函数应该看起来像

double simpleInterest (double Princ, double Rate, int Time) 
{ 

        double value;
        value = Princ*Rate*Time;
        return value;
}   

感谢Shafik yaghmour指出,不要忘记将printf's 格式说明符更改main%f.

于 2013-10-08T12:58:29.967 回答
3
void simpleInterest (double Princ, double Rate, int Time)
    {
          double value;
          value = Princ*Rate*Time;
          return value; //void function should not return anything
    } 

您需要使用双返回类型声明和定义您的函数。

 double simpleInterest (double Princ, double Rate, int Time)
    {
          double value;
          value = Princ*Rate*Time;
          return value; 
    } 

当您返回 double 时,您应该%f在 printf 语句中使用格式说明符。否则它会调用未定义的行为。

printf("the value is %f", simpleInterest (100,0.01,5))
于 2013-10-08T12:59:50.150 回答
2

您定义simpleInterest返回void但尝试在此处返回精度:

return value;

如果要从此函数返回双精度值,则应按如下方式更改签名:

double simpleInterest (double Princ, double Rate, int Time)
^^^^^^

如果我们看到 C99 草案标准部分,这也是未定义的行为6.8.6.4 返回声明说(强调我的):

带有表达式的 return 语句不应出现在返回类型为 void 的函数中。没有表达式的 return 语句只能出现在返回类型为 void 的函数中。

假设您真的想返回double您的printf格式说明符需要从更改为%d%f否则这也会调用未定义的行为:

printf("the value is %f", simpleInterest (100,0.01,5)) ;
                     ^^  
于 2013-10-08T12:59:26.047 回答