C 函数不返回正确的值

C 函数不返回正确的值,c,printf,return-value,return-type,format-specifiers,C,Printf,Return Value,Return Type,Format Specifiers,函数converterm(met,bri)调用时未返回正确的值。代码仍然不完整,但它适用于某些选项。只要输入值,当被问及选择哪个选项时,选择选项1并查看结果 在该行conm.m=conb.ft/3.2808它不返回预期值 //METRIC_BRITISH - BUILD 1.0 #include<stdio.h> #include<stdlib.h> #include<process.h> //GLOBAL-STRUCTURES DECLARATION s

函数
converterm(met,bri)调用时未返回正确的值。代码仍然不完整,但它适用于某些选项。只要输入值,当被问及选择哪个选项时,选择选项1并查看结果

在该行
conm.m=conb.ft/3.2808它不返回预期值

//METRIC_BRITISH - BUILD 1.0

#include<stdio.h>
#include<stdlib.h>
#include<process.h>

//GLOBAL-STRUCTURES DECLARATION
struct metric
{
float m;
float cm;
};

struct british
{
float ft;
float in;
};

//GLOBAL-STRUCTURE-VARIABLE DECLARATION
struct metric met = { 0,0 };
struct british bri = { 0,0 };
int q = 0;
int w = 0;

//USER-DEFINED FUNCTION
struct metric converterm(struct metric conm, struct british conb);
struct british converterb(struct british conb, struct metric conm);
void header();

void header()
{
printf("*-*-*-*-*METRIC_BRITISH*-*-*-*-*");
printf("\n\n");
}

//PROGRAM STARTS HERE
main()
{
//VARIABLE-DECLARATION
int n = 0, c = 0, b = 0, v = 0, i = 0;

//FUNCTION CALL-OUT
header();

printf("Format : Metric \n\n");
printf("Enter the Value for Metres : ");
scanf_s("%f", &met.m);
printf("\n");
printf("Enter the Value for Centimetres : ");
scanf_s("%f", &met.cm);
printf("\n");

printf("*--------------------------------------------*\n\n");

printf("Format : British \n\n");
printf("Enter the Value for Feet : ");
scanf_s("%f", &bri.ft);
printf("\n");
printf("Enter the Value for Inches : ");
scanf_s("%f", &bri.in);
printf("\n\n");

printf("In which Format would you like to add other value? \n");
printf("1. Metric \n");
printf("2. British \n");
printf("Enter any Option : ");

while (i == 0)
{
    printf("\n");
    scanf_s("%d", &n);
    switch (n)
    {
    case 1:

        printf("In which Unit you want to add value? \n");
        printf("1. Metres \n");
        printf("2. Centimetres \n");
        printf("Enter any Option : ");
        scanf_s("%d", &c);
        q = c;
        met = converterm(met, bri);
        i = 1;

        break;

    case 2:

        printf("In which Unit you want to add value? \n");
        printf("1. Feet \n");
        printf("2. Inch \n");
        printf("Enter any Option : ");
        scanf_s("%d", &c);
        q = c;
        bri = converterb(bri, met);
        i = 1;

        break;

    default:

        printf("INVALID OPTION. \n");
        printf("Please Enter Correct Option.");
        i = 0;

        break;
    }

}

printf("Values for Metric : \n");
printf("Metres = %d \n", met.m);
printf("Centimetre = %d \n", met.cm);

printf("\n*--------------------------------------------*\n\n");

printf("Values for British : \n");
printf("Feet = %d \n", bri.ft);
printf("Inch = %d \n", bri.in);

//TERMINAL-PAUSE
system("pause");
}

struct metric converterm(struct metric conm, struct british conb)
{
int i = 0;

switch (q)
{
case 1:

    printf("\n");
    printf("Would you like to Add? \n");
    printf("1. Add Feet to Metre \n");
    printf("2. Add Inch to Metre \n");
    printf("Enter any Option : ");
    scanf_s("%d", &i);
    break;

case 2:

    printf("\n");
    printf("Would you like to Add? \n");
    printf("1. Add Feet to Centimetre \n");
    printf("2. Add Inch to Centimetre \n");
    printf("Enter any Option : ");
    scanf_s("%d", &i);
    break;

}

if (i == 1)
{
    conm.m = conb.ft / 3.2808;
    //conm.m = conb.in / 39.370;
}

else
{
    conm.cm = conb.ft / 0.032808;
    //conm.cm = conb.in / 0.39370;
}

return(conm);
}

struct british converterb(struct british conb, struct metric conm)
{
int i = 0;

switch (w)
{
case 1:

    printf("\n");
    printf("Would you like to Add? \n");
    printf("1. Add Metre to Feet \n");
    printf("2. Add Centimetre to Feet \n");
    printf("Enter any Option : ");
    scanf_s("%d", &i);
    break;

case 2:

    printf("\n");
    printf("Would you like to Add? \n");
    printf("1. Add Metre to Inch \n");
    printf("2. Add Centimetre to Inch \n");
    printf("Enter any Option : ");
    scanf_s("%d", &i);
    break;

}

if (i == 1)
{
    conb.ft = conm.m*3.2808;
    //conb.ft = conm.cm*0.032808;
}

else
{
    conb.in = conm.m*39.370;
    //conb.in = conm.cm*0.39370;
}

return(conb);

}
//英国公制-构建1.0
#包括
#包括
#包括
//全球结构宣言
结构度量
{
浮动m;
漂浮厘米;
};
结构英国
{
浮动英尺;
飘进来;
};
//全局结构变量声明
结构度量met={0,0};
结构英国bri={0,0};
int q=0;
int w=0;
//用户定义函数
结构公制转换器(结构公制conm、结构英制conb);
结构英制转换器B(结构英制conb,结构公制conm);
空标题();
空标题()
{
printf(“*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*”);
printf(“\n\n”);
}
//节目从这里开始
main()
{
//变量声明
int n=0,c=0,b=0,v=0,i=0;
//函数调用
标题();
printf(“格式:公制\n\n”);
printf(“输入米的值:”);
scanf_s(“%f”和met.m);
printf(“\n”);
printf(“输入厘米的值:”);
扫描单位(“%f”和met.cm);
printf(“\n”);
printf(“*---------------------------------------------------------------------------*\n\n”);
printf(“格式:英制\n\n”);
printf(“输入英尺的值:”);
scanf_s(“%f”和bri.ft);
printf(“\n”);
printf(“输入英寸的值:”);
扫描单位(“%f”和“bri.in”);
printf(“\n\n”);
printf(“您希望以何种格式添加其他值?\n”);
printf(“1.公制\n”);
printf(“2.British\n”);
printf(“输入任何选项:”);
而(i==0)
{
printf(“\n”);
扫描频率(“%d”和“&n”);
开关(n)
{
案例1:
printf(“要在哪个单位中增值?\n”);
printf(“1.m\n”);
printf(“2.cm\n”);
printf(“输入任何选项:”);
scanf_s(“%d”和“&c”);
q=c;
met=转换器项(met,bri);
i=1;
打破
案例2:
printf(“要在哪个单位中增值?\n”);
printf(“1.英尺\n”);
printf(“2英寸\n”);
printf(“输入任何选项:”);
scanf_s(“%d”和“&c”);
q=c;
bri=转换器B(bri,met);
i=1;
打破
违约:
printf(“无效选项。\n”);
printf(“请输入正确的选项”);
i=0;
打破
}
}
printf(“度量值:\n”);
printf(“米=%d\n”,met.m);
printf(“厘米=%d\n”,met.cm);
printf(“\n*------------------------------------------------------------\n\n”);
printf(“英国:\n的值”);
printf(“英尺=%d\n”,bri.ft);
printf(“英寸=%d\n”,布里英寸);
//终端暂停
系统(“暂停”);
}
结构公制转换器(结构公制conm,结构英制conb)
{
int i=0;
开关(q)
{
案例1:
printf(“\n”);
printf(“是否要添加?\n”);
printf(“1.将英尺添加到米\n”);
printf(“2.将英寸添加到米\n”);
printf(“输入任何选项:”);
扫描单位(“%d”和“i”);
打破
案例2:
printf(“\n”);
printf(“是否要添加?\n”);
printf(“1.将英尺添加到厘米\n”);
printf(“2.将英寸添加到厘米\n”);
printf(“输入任何选项:”);
扫描单位(“%d”和“i”);
打破
}
如果(i==1)
{
conm.m=conb.ft/3.2808;
//conm.m=conb.in/39.370;
}
其他的
{
圆锥厘米=圆锥英尺/0.032808;
//conm.cm=conb.in/0.39370;
}
返回(conm);
}
结构英制转换器B(结构英制conb,结构公制conm)
{
int i=0;
开关(w)
{
案例1:
printf(“\n”);
printf(“是否要添加?\n”);
printf(“1.将米添加到英尺\n”);
printf(“2.将厘米添加到英尺\n”);
printf(“输入任何选项:”);
扫描单位(“%d”和“i”);
打破
案例2:
printf(“\n”);
printf(“是否要添加?\n”);
printf(“1.将米添加到英寸\n”);
printf(“2.将厘米添加到英寸\n”);
printf(“输入任何选项:”);
扫描单位(“%d”和“i”);
打破
}
如果(i==1)
{
圆锥英尺=圆锥米*3.2808;
//圆锥英尺=圆锥厘米*0.032808;
}
其他的
{
conb.in=conm.m*39.370;
//圆锥英寸=圆锥厘米*0.39370;
}
返回(conb);
}

问题出在您试图打印值的部分。万一

printf("Metres = %d \n", met.m);
printf("Centimetre = %d \n", met.cm);

您正在使用
%d
格式说明符打印
float
类型变量的值。您应该改用
%f


FWIW,为格式说明符调用使用不适当类型的参数。

请编辑您的帖子并修复缩进。
printf("Feet = %d \n", bri.ft);
printf("Inch = %d \n", bri.in);