我收到消息:无法在分配中将 'float' 转换为 'float*' 并且我有一些逻辑错误

Posted

技术标签:

【中文标题】我收到消息:无法在分配中将 \'float\' 转换为 \'float*\' 并且我有一些逻辑错误【英文标题】:I get the message: Cannot convert 'float' to 'float*' in assignment and i have some logical mistakes我收到消息:无法在分配中将 'float' 转换为 'float*' 并且我有一些逻辑错误 【发布时间】:2019-04-08 22:59:58 【问题描述】:

我的编译器有问题,我一定有一些逻辑错误(C语言) 我想要一个 void 函数,它可以给我最高价格、最低价格和最多 100 个价格的表的平均值。如果用户给price=-1我希望程序结束!

这是我的代码:

#include <stdio.h>

void function(float pin[],int j,float *min,float *max,float *mo,int cnt);

int main()


    int i=0,count=0;

    float prc[100],mo;
    for(i=0;i<=99;i++)
    
        printf("Enter price:");
        scanf("%f",&prc[i]);
            if(prc[i]==-1)
        
            break;
        
        count++;
    

    int min=prc[0];
    int max=prc[0];
    void function(float prc,int i,float *min,float *max,float *mo,int count);
    printf("Minimum price is:%f Maximum price is:%f and Mo is:%f",min,max,mo);

    return 0;


void function(float pin[],int j,float *min,float *max,float *mo,int cnt)

    float sum;

    for(j=0;j<=cnt;j++)
    
        if(pin[j]<*min)
        
            min=pin[j];
        
        if(pin[j]>*max)
        
            *max=pin[j];
        
        sum=+pin[j];
    
    *mo=sum/j;

【问题讨论】:

相对于您的预期,它在做什么/不做什么? 当您在其他地方处理float 值时,为什么要定义int minint max 你声明了两次函数,但你从未调用它。 main() 中的声明应该是带有实际参数且没有返回类型规范的调用。复制和粘贴错误? 第二个声明似乎是试图调用它,但您还必须将int min, max 更改为float min, max,并使用... &amp;min, &amp;max, ... 参数调用该函数。 请改进标题。如所写,标题没有提供有关问题的信息,这意味着其他有相同问题的人将无法找到它。标题“我正在尝试使此代码正常工作”适用于该站点上的几乎所有问题。 (你也忘了问一个问题。) 【参考方案1】:

看起来你有很多小错误(缺少取消引用、使用超出范围的变量、错误的运算符等):

#include <stdio.h>

void function(float pin[], float *min, float *max, float *mo, int cnt);

int main()

    int i=0, count=0;

    float prc[100], mo;
    for (i=0; i<=99; i++)
    
        printf("Enter price:");
        scanf("%f", &prc[i]);
        if (prc[i] == -1)
        
            break;
        

        count++;
    

    float min=prc[0];
    float max=prc[0];
    function(&prc[0], &min, &max, &mo, count);
    printf("Minimum price is:%f Maximum price is:%f and Mo is:%f", min, max, mo);

    return 0;


void function(float pin[], float *min, float *max, float *mo, int cnt)

    float sum = 0.0f;

    for (int j=0; j < cnt; j++)
    
        if (pin[j] < *min)
        
            *min = pin[j];
        
        if (pin[j] > *max)
        
            *max = pin[j];
        

        sum += pin[j];
    

    *mo = sum / cnt;

【讨论】:

【参考方案2】:

函数有几个错误:

我已经修改了代码,除了函数参数 mo 之外看起来还不错,决定是将其声明为浮点指针还是浮点数

    看main里面的声明,你在调用一个函数但是语法是声明的。

    使用 mo 作为参数,但 mo 被定义为浮点变量,而函数根据声明接受指针,并且有一些与类型相关的警告

    声明了整数,但使用 float %f 的格式说明符打印它们

包括

void function(float pin[],int j,float *min,float *max,float *mo,int cnt);

int main()


    int i=0,count=0;

    float prc[100],mo;
    for(i=0;i<=99;i++)
    
        printf("Enter price:");
        scanf("%f",&prc[i]);
            if(prc[i]==-1)
        
            break;
        
        count++;
    

    int min=prc[0];
    int max=prc[0];
    function(prc,i,min,max,mo,count);
    printf("Minimum price is:%f Maximum price is:%f and Mo is:%f",min,max,mo);

    return 0;


void function(float pin[],int j,float *min,float *max,float *mo,int cnt)

    float sum;

    for(j=0;j<=cnt;j++)
    
        if(pin[j]<*min)
        
            *min=pin[j];
        
        if(pin[j]>*max)
        
            *max=pin[j];
        
        sum=+pin[j];
    
    *mo=sum/j;

【讨论】:

感谢您的分析!【参考方案3】:

指针和类型使用错误,使用

float min=prc[0];
float max=prc[0];
function(prc,i,&min,&max,&mo,count);

您声明为:

void function(float pin[],int j,float *min,float *max,float *mo,int cnt);

所以你必须提供一个浮点指针,而不是一个浮点数。

【讨论】:

以上是关于我收到消息:无法在分配中将 'float' 转换为 'float*' 并且我有一些逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将非 mime 消息转换为 mime 邮件消息

如何在 smarty 中将 float 转换为 int

无法为具有大小的数组分配内存

无法在测试中将 App Delegate 强制转换为 App Delegate

无法将 Float 类型的值转换为预期的参数类型 NSNumber

如何在 JNIWrapper 中将 C++ Array<float,size> 转换为 jfloatArray?