我尝试在代码块上执行以下代码,我得到的不是 92.5 的标记,而是 0.000000

I tried to execute the following code on code blocks, where instead of getting the marks as 92.5 I get 0.000000

为什么我得到的分数是 0.000000 而不是 92.500000?是否与结构中的浮动有关或我的代码有问题?

#include<stdio.h>

struct student
{
    char name[10];
    int age;
    int roll_no;
    float marks; 
};

int main()
{
    struct student s={"nick", 20, 52, 92.5};
    print(s.name,s.age,s.roll_no,s.marks);
}

void print(char name[],int age,int roll_no,float marks)
{
    printf("%s %d %d %f\n",name,age,roll_no,marks);//output:nick 20 52 0.000000
}

这里的问题很微妙,但是编译器应该能够给你一个警告(如果没有那么你需要启用更多警告)。

问题是您在调用之前没有声明函数print。这意味着编译器将假定所有数字参数都具有基本类型,并受制于 default argument promotions。当您稍后使用不同的参数类型定义函数时,这将导致 未定义的行为

您需要在使用前声明(或定义)函数:

// Declare the function
void print(char name[], int age, int roll_no, float marks);

int main()
{
    struct student s={"nick", 20, 52, 92.5};
    print(s.name,s.age,s.roll_no,s.marks);
}

// Define (implement) the function
void print(char name[], int age, int roll_no, float marks)
{
    printf("%s %d %d %f\n", name, age, roll_no, marks);
}