初学者C - 尝试功能

时间:2015-09-22 17:16:11

标签: c function

我尝试用ANSI C编写我的第一个函数。

该函数的目的是获得2个用户输入(capital,interest_rate)并将'interest_rate * capital'的结果返回给main函数,然后我尝试打印出最终结果。

到目前为止我的代码:

#include <stdio.h>

 /* k= Kapital ( capital )
  * i= Zinssatz ( interestrate )
  * s= aufruf der compute funktion
  * 
  */

long compute_interest (long k,long i) {
  printf("Bitte geben Sie Ihr Startkapital ein\n"); /*user input capital*/
  scanf("%ld\n", &k);

  printf("Bitte geben Sie den Zinssatz ein\n"); /*user input intrstrte*/
  scanf("%ld\n", &i);

  return k * i;
}



 long main(void) {
   long s;
   s = compute_interest;
   printf("geld = %ld\n", s);



   return 0;
 }  

编译给我这个错误信息:

    warning: assignment makes integer from pointer without a cast    
    [enabled by default]
    s = compute_interest;
      ^

我的错误是什么?我应该改变什么?

3 个答案:

答案 0 :(得分:4)

由于您没有向函数传递任何值,我建议您将该函数保留为空。即你的功能应该是这样的

long compute_interest () {

  long k, i;
  printf("Bitte geben Sie Ihr Startkapital ein\n"); /*user input capital*/
  scanf("%ld\n", &k);

  printf("Bitte geben Sie den Zinssatz ein\n"); /*user input intrstrte*/
  scanf("%ld\n", &i);

  return k * i;
}

然后调出你必须放括号的功能。即

long main(void) {
   long s;
   s = compute_interest();
   printf("geld = %ld\n", s);



   return 0;
 }  

这必须为您提供所需的结果。希望这会有所帮助

答案 1 :(得分:3)

两个问题:

s = compute_interest;

这不会调用该函数。因为您省略了(),所以这实际上会尝试将指向函数的指针分配给s。这就是您收到警告的原因。这样做是为了调用函数:

s = compute_interest();

这将我们带到第二个问题。您可以定义compute_interest以获取两个参数,但这些参数的值会被scanf调用覆盖。

在这种情况下,您真正​​想要的是ki是局部变量而不是参数:

long compute_interest () {
  long k, i;

  printf("Bitte geben Sie Ihr Startkapital ein\n"); /*user input capital*/
  scanf("%ld\n", &k);

  printf("Bitte geben Sie den Zinssatz ein\n"); /*user input intrstrte*/
  scanf("%ld\n", &i);

  return k * i;
}

答案 2 :(得分:1)

在C中,函数名称被视为指向函数本身的指针。 compute_interest是函数名称,其类型为long (*)(long, int)s类型为long int,作业s = compute_interest;正在指定long数据类型的指针,这就是您收到警告的原因。
您需要在()之后放置compute_interest以让编译器知道它是一个函数调用。 您还需要删除函数参数long k,long i并将其放在函数体中。