我尝试用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;
^
我的错误是什么?我应该改变什么?
答案 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
调用覆盖。
在这种情况下,您真正想要的是k
和i
是局部变量而不是参数:
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
并将其放在函数体中。