二进制+的无效操作数(有'float *'和'float *')

时间:2015-04-07 17:43:21

标签: c

嘿,我是这里的新人:D(我知道这与问题有任何关系) 每次我尝试构建我的代码这个错误apear: 无效的操作数到二进制+(有'浮动*'和'浮动*') 这是我的代码

void verser() {
    int j,i;
    long n,m;
    float *s;
    printf("saisir ton num de compte");
    scanf("%d",&n);
    printf("saisir num de compte desti");
    scanf("%d",&m);
    printf("saisir la valeur a verser");
    scanf("%i",&s);
    *s/=4.0;
    for (i=0; i<c; i++)
    {   for (j=0; j<c; j++)
        {   if (comp[i].num_compte==&n)
            {   if (comp[j].num_compte==&m)
                {   if(comp[n].solde>s) {
                        comp[i].solde-=s;
                        comp[j].solde+=s;
                    }
                }
            }
        }
    }
}

伙计们抱歉,我会在这里添加这可能会有所不同......

 typedef struct {
char *nom;
char *prenom;
long *num_compte;
float *solde;
}compte;


compte comp[50];
    int c=0;

3 个答案:

答案 0 :(得分:1)

变量s是指向float的指针。这不是浮动。要获得指向的值,您需要使用* s,如下所示:comp [j] .solde + = * s;

答案 1 :(得分:1)

您尝试添加指向浮点数的指针。

然而,在这种情况下,声明是错误的,它应该是&#34; float s;&#34;而不是&#34; float * s;&#34;另外,正确&#34; * s / = 4.0;&#34; to&#34; s / = 4.0;&#34;。

答案 2 :(得分:1)

在您的代码中,您有

float *s;
scanf("%i",&s);

然后尝试

*s/=4.0;

你可能会得到一个SIGSEGV,因为你要将用户给出的地址分配给s,这几乎肯定会导致分段错误。

另外,你正在尝试

comp[j].solde+=s;

s是一个指针,所以你试图将s的地址添加到它(不知道你为什么这样做)。

所以,我建议你从指向普通浮点数的指针中改变s

float s;