c语言长度转换报错是什么原因呢


#include 
#include 
#include 
#include 

void LengthMenu() {       //排序子菜单

    printf("****************************************\n");
    printf("*\t\t1.英寸转化\t\t*\n");
    printf("*\t\t2.英尺转化 \t\t*\n");
    printf("*\t\t3.毫米转化 \t\t*\n");
    printf("*\t\t4.厘米转化 \t\t*\n");
    printf("*\t\t5.分米转化 \t\t*\n");
    printf("*\t\t6.米转化 \t\t*\n");
    printf("*****************************************\n");
}

void Lenhgth()
{
double q,n;
 char in,ft,mm,cm,dm,m;
 char a[6];
 int i;
 printf("请输入要算的数:\n");
 scanf("%lf",&q);
 printf("请输入您的选择:\n");
 scanf("%d",&i);

 switch(i)
 {
  case 1://in
    printf("输入想要转化成的单位:\n");
    scanf("%s",&a);
    if(strcmp(a,"in")==0) n=q;
    else if(strcmp(a,"ft")==0) n=q*12;
    else if(strcmp(a,"mm")==0) n=q*0.0394;
    else if(strcmp(a,"cm")==0) n=q*0.394;
    else if(strcmp(a,"dm")==0) n=q*3.937;
    else if(strcmp(a,"m")==0)  n=q*39.37;
    printf("%lf in=%lf %s",q,n,a);
    break;
  case 2://ft
    printf("输入想要转化成的单位:\n");
    scanf("%s",&a);
    if(strcmp(a,"in")==0) n=q/12;
    else if(strcmp(a,"ft")==0) n=q;
    else if(strcmp(a,"mm")==0) n=q*0.00328;
    else if(strcmp(a,"cm")==0) n=q*0.0328;
    else if(strcmp(a,"dm")==0)  n=q*0.328;
    else if(strcmp(a,"m")==0)  n=q*3.28;
    printf("%lf ft=%lf %s",q,n,a);
    break;
  case 3://mm
    printf("输入想要转化成的单位:\n");
    scanf("%s",&a);
    if(strcmp(a,"in")==0)  n=q/0.0394;
    else if(strcmp(a,"ft")==0) n=q/0.00328;
    else if(strcmp(a,"mm")==0) n=q;
    else if(strcmp(a,"cm")==0) n=q*10;
    else if(strcmp(a,"dm")==0) n=q*100;
    else if(strcmp(a,"m")==0)  n=q*1000;
    printf("%lf mm=%lf %s",q,n,a);
    break;
  case 4://cm
    printf("输入想要转化成的单位:\n");
    scanf("%s",&a);
    if(strcmp(a,"in")==0)  n=q/0.394;
    else if(strcmp(a,"ft")==0) n=q/0.0328;
    else if(strcmp(a,"mm")==0) n=q/10;
    else if(strcmp(a,"cm")==0) n=q;
    else if(strcmp(a,"dm")==0) n=q*10;
    else if(strcmp(a,"m")==0)  n=q*100;
    printf("%lf cm=%lf %s",q,n,a);
    break;
  case 5://dm
    printf("输入想要转化成的单位:\n");
    scanf("%s",&a);
    if(strcmp(a,"in")==0) n=m/3.937;
    else if(strcmp(a,"ft")==0) n=m/0.328;
    else if(strcmp(a,"mm")==0) n=m/100;
    else if(strcmp(a,"cm")==0) n=m/10;
    else if(strcmp(a,"dm")==0) n=m;
    else if(strcmp(a,"m")==0)  n=m*10;
    printf("%lf dm=%lf %s",m,n,a);
    break;
  case 6://m
    printf("输入想要转化成的单位:\n");
    scanf("%s",&a);
    if(strcmp(a,"in")==0) n=q/39.37;
    else if(strcmp(a,"ft")==0) n=q/3.28;
    else if(strcmp(a,"mm")==0) n=q/1000;
    else if(strcmp(a,"cm")==0) n=q/100;
    else if(strcmp(a,"dm")==0) n=q/10;
    else if(strcmp(a,"m")==0)  n=q;
    printf("%lf m=%lf %s",q,n,a);
    break;
  default:
    printf("输入错误请重新输入");
}

}




int main()
{

LengthMenu();


Lenhgth();
return 0;

}

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
该代码有多处语法错误和拼写错误,但最引人注目的是 Lenhgth(); 这一行,因为其中有一个中文分号 “;”,而 C 语言中并没有中文分号。建议将这行代码中的中文分号替换为英文分号 “;”,即 Lenhgth();。
·
此外,该代码中还有一些可能导致运行错误的细节问题,如 scanf("%s",&a) 可能会导致缓冲区溢出,应该使用 scanf("%s",a) 来避免这个问题。此外,为了避免未定义行为,建议将 mm、cm、dm、m 这些变量的类型改为 char,或者直接使用 char 类型的变量。

计算公式有错误,比如输入 5, 选择 4.厘米转化,想要转化为 m ,输出 :5.000000 cm=500.000000 m 这明显计算错误,其他的换算也有错误,建议再仔细梳理下计算公式的代码,该用除的用除,该用乘法的用乘法。其他一些错误已做修改,改动处见注释,供参考:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void LengthMenu() {       //排序子菜单

    printf("****************************************\n");
    printf("*\t\t1.英寸转化\t\t*\n");
    printf("*\t\t2.英尺转化 \t\t*\n");
    printf("*\t\t3.毫米转化 \t\t*\n");
    printf("*\t\t4.厘米转化 \t\t*\n");
    printf("*\t\t5.分米转化 \t\t*\n");
    printf("*\t\t6.米转化 \t\t*\n");
    printf("*****************************************\n");
}

void Lenhgth()
{
    double q, n;
    //char in, ft, mm, cm, dm, m;
    char a[6];
    int i;
    printf("请输入要算的数:\n");
    scanf("%lf", &q);
    printf("请输入您的选择:\n");
    scanf("%d", &i);

    switch (i)
    {
    case 1://in
        printf("输入想要转化成的单位:\n");
        scanf("%s", a);                   //scanf("%s", &a); 修改
        if (strcmp(a, "in") == 0) n = q;
        else if (strcmp(a, "ft") == 0) n = q * 12;
        else if (strcmp(a, "mm") == 0) n = q * 0.0394;
        else if (strcmp(a, "cm") == 0) n = q * 0.394;
        else if (strcmp(a, "dm") == 0) n = q * 3.937;
        else if (strcmp(a, "m") == 0)  n = q * 39.37;
        printf("%lf in=%lf %s", q, n, a);
        break;
    case 2://ft
        printf("输入想要转化成的单位:\n");
        scanf("%s", a);                 //scanf("%s", &a);  修改
        if (strcmp(a, "in") == 0) n = q / 12;
        else if (strcmp(a, "ft") == 0) n = q;
        else if (strcmp(a, "mm") == 0) n = q * 0.00328;
        else if (strcmp(a, "cm") == 0) n = q * 0.0328;
        else if (strcmp(a, "dm") == 0)  n = q * 0.328;
        else if (strcmp(a, "m") == 0)  n = q * 3.28;
        printf("%lf ft=%lf %s", q, n, a);
        break;
    case 3://mm
        printf("输入想要转化成的单位:\n");
        scanf("%s", a);             //scanf("%s", &a); 修改
        if (strcmp(a, "in") == 0)  n = q / 0.0394;
        else if (strcmp(a, "ft") == 0) n = q / 0.00328;
        else if (strcmp(a, "mm") == 0) n = q;
        else if (strcmp(a, "cm") == 0) n = q * 10; //????
        else if (strcmp(a, "dm") == 0) n = q * 100;//????
        else if (strcmp(a, "m") == 0)  n = q * 1000;//????
        printf("%lf mm=%lf %s", q, n, a);
        break;
    case 4://cm
        printf("输入想要转化成的单位:\n");
        scanf("%s", a);           //scanf("%s", &a); 修改
        if (strcmp(a, "in") == 0)  n = q / 0.394;
        else if (strcmp(a, "ft") == 0) n = q / 0.0328;
        else if (strcmp(a, "mm") == 0) n = q / 10;
        else if (strcmp(a, "cm") == 0) n = q;
        else if (strcmp(a, "dm") == 0) n = q * 10;   //????
        else if (strcmp(a, "m") == 0)  n = q * 100;  //????
        printf("%lf cm=%lf %s", q, n, a);
        break;
    case 5://dm
        printf("输入想要转化成的单位:\n");
        scanf("%s", a);         //scanf("%s", &a);  修改
        if (strcmp(a, "in") == 0) n = q / 3.937;     //n = m / 3.937;修改
        else if (strcmp(a, "ft") == 0) n = q / 0.328;//n = m / 0.328;修改
        else if (strcmp(a, "mm") == 0) n = q / 100;  //n = m / 100;  修改
        else if (strcmp(a, "cm") == 0) n = q / 10;   //n = m / 10;   修改
        else if (strcmp(a, "dm") == 0) n = q;        //n = m;        修改
        else if (strcmp(a, "m") == 0)  n = q * 10;   //n = m * 10;   修改
        printf("%lf dm=%lf %s", q, n, a); //printf("%lf dm=%lf %s", m, n, a);修改
        break;
    case 6://m
        printf("输入想要转化成的单位:\n");
        scanf("%s", a);               //scanf("%s", &a);修改
        if (strcmp(a, "in") == 0) n = q / 39.37;
        else if (strcmp(a, "ft") == 0) n = q / 3.28;
        else if (strcmp(a, "mm") == 0) n = q / 1000;
        else if (strcmp(a, "cm") == 0) n = q / 100;
        else if (strcmp(a, "dm") == 0) n = q / 10;
        else if (strcmp(a, "m") == 0)  n = q;
        printf("%lf m=%lf %s", q, n, a);
        break;
    default:
        printf("输入错误请重新输入");
    }
}

int main()
{

    LengthMenu();
    Lenhgth();   //;修改
    return 0;
}