错误:语义问题分配给' int'来自不兼容的类型' void'

时间:2015-10-05 06:17:21

标签: c semantics

在使用函数原型创建程序时,出现了问题。它说:

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);
}

1 个答案:

答案 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);

我建议使用前一种方法,考虑到你似乎正在学习的水平(没有违法行为,只是声明可以帮助你选择合适的方法)。