关于C语言长度单位转换的题没想明白咋整的问题,如何解决?(语言-c语言)

问题遇到的现象和发生背景
已知1英尺=0.3048米1码=0.9144米1尺=0.3333米,只用这三个,提示用户在屏幕输入一长度单位(英尺/码/米/尺)允许小数以yc/ma/chi/m结尾将输入长度转为另外三个没输入的长度打印,并保留五位小数,将所有转换过程写成子函数
我的解答思路和尝试过的方法
达到所有的单位互相转换只能用已知1英尺=0.3048米1码=0.9144米1尺=0.3333米这三个,就是不能单纯定一个变量乘一下了

#include <stdio.h>

float arr[4] = {0.3048, 0.9144, 0.3333, 1}; // 单位换算
char danwei[4][6] = {"yc", "ma", "chi", "m"};
int flag = 3;

float strTofloat(char str[]) {
    // 从给定字符串中提取小数,并判断输入的单位
    float a;
    int dotIndex = 0x7f7f7f7f, endNumberFlag = -1;
    for (int i = 0; str[i]; i++) {
        if (str[i] == '.') {
            dotIndex = i;
            continue;
        }
        if (str[i] >= '0' && str[i] <= '9') {
            // 提取数值
            a = a * 10 + str[i] - '0';
        } else if (a) {
            endNumberFlag = i - 1; //数据结束的下标
            // 判断输入的单位
            for (int j = 0; j < 4; j++) {
                if (str[i] == danwei[j][0] && str[i + 1] == danwei[j][1]) {
                    flag = j;
                    break;
                }
            }
        }
    }

    // 转化为小数
    for (int i = dotIndex; i < endNumberFlag; i++) {
        a /= 10;
    }

    // printf("长度:%.5f, 单位:%s\n", a, danwei[flag]);

    return a;
}
void convert(float length, int flag) {
    //给定长度和单位,转换为其他的长度单位
    length = length * arr[flag]; // 先转化为米,再由米转化为其他的单位
    printf("转换结果:");
    for (int i = 0; i < 4; i++) {
        if (i != flag) {
            printf("%.5f%s\t",length/arr[i],danwei[i]);
        }
    }
}
int main() {
    printf("输入一长度单位(英尺/码/米/尺)允许小数以yc/ma/chi/m结尾: ");
    char str[100];
    scanf("%s", str);
    float length = strTofloat(str);
    convert(length, flag);
    return 0;
}

好象刚写过的
https://ask.csdn.net/questions/7814557

1、以单位“米”作为中间转换单位,也就是说定义3个函数,形参分别代表 英尺、码和尺,返回值为 米,如:

double yc2m(double m); double ma2m(double m); double chi2m(double m);

再定义3个函数,形参均为 米,返回值分别为英尺、码和尺,如:

double m2yc(double yc); double m2ma(double ma); double m2chi(double chi);

2、检测输入小数的结尾字符,如果是米,那么直接调用后面3个函数即可得到其他单位的值;如果不是,则先调用前3个中相应的函数转换为m,再调用后面函数转换为其他单位的值,输出即可