在使用函数原型创建程序时,出现了问题。它说:
Semantic issue Assigning to 'int' from incompatible type 'void'.
你能帮我解决这个问题吗?
这是我的代码:
#include <stdio.h>
#include <math.h>
void powr(int);
int main(void) {
int n=1, sq, cu, quart, quint;
printf("Integer Square Cube Quartic Quintic\n");
do {
sq = powr(n); //here is the error line
cu = powr(n); //here is the error line
quart = powr(n); //here is the error line
quint = powr(n); //here is the error line
printf("%d %d %d %d %d\n", n, sq, cu, quart, quint);
n++;
}
while (n<=25);
return 0;
}
void powr(int n)
{
int a, cu, quart, quint;
a=pow(n,2);
cu=pow(n,3);
quart=pow(n,4);
quint=pow(n,2);
}
答案 0 :(得分:3)
void powr(int n)
表示该函数将返回,,因此您不允许执行以下操作:
sq = powr(n);
如果您希望自己的功能采用int
和返回 int
,则应该是:
int powr(int n)
(原型和函数定义)。
在任何情况下,您在 powr
函数中设置的变量都不可用于调用者(并且使用全局变量通常是一个非常糟糕的主意),因此您需要这样做。 d需要更改函数以仅返回数字的平方并调用它:
sq = powr (n);
cu = n * sq;
quart = powr (sq);
quint = n * quart;
或者您可以将变量的地址传递给函数,以便可以更改它们,例如:
void powr(int n, int *pSq, int *pCu, int *pTo4, int *pTo5) {
*pSq = pow (n, 2);
*pCu = *pSq * n;
*pTo4 = pow (*pSq, 2);
*pTo5 = *pCu * *pSq;
}
并将其命名为:
powr (n, &sq, &cu, &quart, &quint);
我建议使用前一种方法,考虑到你似乎正在学习的水平(没有违法行为,只是声明可以帮助你选择合适的方法)。