【问题标题】:error: passing 'float [4]' to parameter of incompatible type 'float'错误:将“float [4]”传递给不兼容类型“float”的参数
【发布时间】:2026-02-20 08:05:01
【问题描述】:

我必须创建一个名为 print_array 的函数,它接受两个参数:一个浮点数组和一个整数(表示数组的长度)。该函数应以两位小数的精度打印整个浮点数组。例如,

float a[] = {1.555, 3, 1.645, 178};
print_array(a, 4);

它应该给出:

1.55, 3.00, 1.64, 178.00

我的代码如下(有点乱):

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>

int times_two(int a);
void print_int(int a);
int half(int a);
void print_float(float a);
void max(float a);
float average(float a);
void print_array(float a, int b);


int main (void)
{
    int z = get_int("First Value for exercise 3? ");
    int g = get_int("Second Value for exercise 3? ");
    int max_value_1 = get_int("First Value (max) for exercise 4? ");
    int max_value_2 = get_int("Second Value (max for exercise 4? ");
    int x = 2;
    int y = half(x);
    float q = average(z + g);
    print_int(y);
    print_float(2.7444);
    print_float(q);
    if(max_value_1 > max_value_2 || max_value_1 == max_value_2)
    {
        max(max_value_1);
    }
    else
    {
        max(max_value_2);
    }
    float a[] = {1.555, 3, 1.645, 178};
    print_array(a, 4);
}
float average(float a)
{
    return a / 2;
}

int times_two(int a)
{
    return a * 2;
}

int half(int a)
{
    return a / 2;
}

void print_int(int a)
{
    printf("Value Exercise 1 = %i\n", a);
}

void print_float(float a)
{
    printf("Value Exercise 2/3 = %.2f\n", a);
}

void max(float a)
{
    printf("Value Exercise 4 = %.2f\n", a);
}

void print_array(float a, int b)
{
    printf("Value Exercise 4 = %.2f\n", a);
}

由于某些其他原因,我收到此错误并且真的不知道如何修复它们,因为我是“函数”的新手:

functions.c:37:17: error: passing 'float [4]' to parameter of incompatible type 'float'
    print_array(a, 4);
                ^
functions.c:13:24: note: passing argument to parameter 'a' here
void print_array(float a, int b);
                       ^
1 error generated.

【问题讨论】:

  • Re "我必须创建一个名为 print_array 的函数,它接受两个参数:一个浮点数组和一个整数",1。那不是你所做的。您的函数采用floatint。 2. 实际上,不可能有浮点数组参数。该函数应采用指向float(数组的第一个)的指针

标签: c cs50


【解决方案1】:
    void print_array(float a, int b);

这行说print_array的第一个参数是float

    float a[] = {1.555, 3, 1.645, 178};
    print_array(a, 4);

这一行将一个数组作为第一个参数传递给print_array。这与前面显示的第一个参数是float 的行不一致。

这正是错误告诉你的内容。

解决此问题的第一步是更改此问题:

    void print_array(float a, int b);

类似于:

    void print_array(float a[], int b);

    void print_array(float *a, int b);

【讨论】:

  • 我建议size_t 而不是int
  • @0___________,那会更好,但必须按照作业要求进行