万军之中取敌将 2021-12-26 20:51 采纳率: 100%
浏览 32
已结题

不知道什么地方出了问题,希望可以帮助一下(语言-c++)

问题遇到的现象和发生背景

不知道什么地方出了错,下方检错的行数不对

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    int data1,data2,xunhuan4,mode = 1;
    char op;
start:
    printf("该计算器有普通计算模式(1)特殊模式(2):\n");
    scanf("%d",&mode);
    if(mode == 1)
    {
    printf("||||||||||||||||||||模式1||||||||||||||||||||||||||\n");
    printf(" \n \n \n data1 op data2\n");
input:
    scanf("%d %c %d",&data1,&op,&data2);
    switch(op)
    {
    case '+':
        printf("%d %c %d = %d\n",data1,op,data2,data1+data2);
        break;
    case '-':
        printf("%d %c %d = %d\n",data1,op,data2,data1-data2);
        break;
    case '*':
        printf("%d %c %d = %d\n",data1,op,data2,data1*data2);
        break;
    case '/':
        if(data2 == 0)
        {
            printf("分母是零,请重新输入:");
            goto input;
        }
        else
        {
        printf("%d %c %d = %.3f\n",data1,op,data2,(float)data1/data2);//防止整除取整,强制转换data1为浮点型
        break;
        }
    default: printf("该计算器没有此功能,请重新输入:");
             goto input;
    }
        goto loop;
        }
    else if(mode == 2)
    {
        printf("||||||||||||||||||||模式2|||||||||||||||||||||||||\n \n \n \n");
        printf("(1)开平方       (2)平方      \n");
        printf("(3)进制转换      (4)正在开发...\n");
        int mode_2 == 0;
        printf("\n \n请输入模式(1/2/3/4): ");
        scanf("%d",&mode_2);
        if(mode_2 == 1)
        {
            float mode_2_var1;
            printf("_--------------------------模式1(开平方)---------------------\n \n");
            printf("输入格式为 --- num  :");
            scanf("%f",&mode_2_var1);
            printf("%f",sqrt(mode_2_var1));
            goto loop;
        }
        else if(mode_2 == 2)
        {
            printf("----------------------------模式2(平方)------------------------\n \n");
            printf("输入格式为 ---a b----(a的b次方)");
            float mode_2_2_var1,mode_2_2_var2;
            scanf("%f %f",&mode_2_2_var1,&mode_2_2_var2);
            printf("%.1f的%.1f次方为%.2f\n",mode_2_2_var1,mode_2_2_var2,pow(mode_2_2_var1,mode_2_2_var2));
            goto loop;
        }
        else if(mode_2 == 3)
        {
            printf("----------------------------模式3(进制转换) ---------------------\n \n");
            printf("请先输入数据的进制:");
            int mode_2_3_var3;
jinzhi:
            scanf("%d",&mode_2_3_var3);
            printf("输入格式为-----a c-----(a的b进制表示)(只能转换16,10,8进制)--------");
            int mode_2_3_var1,mode_2_3_var2,mode_2_3_jinzhi,mode_2_3_number;
jinzhi2:
            switch (mode_2_3_var3){//输入数据的键入格式
            case 8:
                scanf("%o %d",&mode_2_3_number,&mode_2_3_jinzhi);
                break;
            case 10:
                scanf("%d %d",&mode_2_3_number,&mode_2_3_jinzhi);
                break;
            case 16:
                scanf("%x %d",&mode_2_3_number,&mode_2_3_jinzhi);
                break;
            default: printf("你的进制数输入错误,请重新输入:");
                     goto jinzhi;
            }
            switch(mode_2_3_jinzhi)
            {
            case 8:
                printf("%o\n",mode_2_3_number);
                break;
            case 10:
                printf("%d\n",mode_2_3_number);
                break;
            case 16:
                printf("%#x\n",mode_2_3_number);
                break;
            default:
                printf("进制输入错误,请重新输入:");
                goto jinzhi2;
                }
            }
        else if(mode_2 == 4)
        {
            printf("开发人员正在开发,敬请期待!\n");
            goto loop;
        }
loop: 
            printf("如果要继续输入请输入1,退出请按0\n");
            scanf("%d",&xunhuan4);
            if(xunhuan4 == 1)
            {
                goto start;
            }
            else if(xunhuan4 == 0)
            {
                goto end;
            }
    }
end:
    printf("--------------------欢迎使用此计算器,再见!”---------------------------\n");
    return 0;
}

运行结果及报错内容

Compiling
简单计算器全.c
D:\简单计算器全\简单计算器全.c(47) : error C2143: syntax error : missing ';' before 'type'
D:\简单计算器全\简单计算器全.c(49) : error C2065: 'mode_2' : undeclared identifier
D:\简单计算器全\简单计算器全.c(63) : error C2143: syntax error : missing ';' before 'type'
D:\简单计算器全\简单计算器全.c(64) : error C2065: 'mode_2_2_var1' : undeclared identifier
D:\简单计算器全\简单计算器全.c(64) : error C2065: 'mode_2_2_var2' : undeclared identifier
D:\简单计算器全\简单计算器全.c(72) : error C2143: syntax error : missing ';' before 'type'
D:\简单计算器全\简单计算器全.c(74) : error C2065: 'mode_2_3_var3' : undeclared identifier
D:\简单计算器全\简单计算器全.c(76) : error C2143: syntax error : missing ';' before 'type'
D:\简单计算器全\简单计算器全.c(80) : error C2065: 'mode_2_3_number' : undeclared identifier
D:\简单计算器全\简单计算器全.c(80) : error C2065: 'mode_2_3_jinzhi' : undeclared identifier
执行 cl.exe 时出错.

简单计算器全.obj - 1 error(s), 0 warning(s)

我的解答思路和尝试过的方法

查错时找不到错误

我想要达到的结果

没有错误并且可以正常运行

  • 写回答

2条回答 默认 最新

  • 关注

    .C是C语言文件,所有的变量声明必须放在函数的开头位置。代码修改如下:

    
    #include <stdio.h>
    #include <math.h>
    int main(int argc, const char *argv[])
    {
        int data1,data2,xunhuan4,mode = 1;
        char op;
        //把原来放在下面的变量声明放在这里
        int mode_2 = 0;
        int mode_2_3_var1,mode_2_3_var2,mode_2_3_jinzhi,mode_2_3_number;
        float mode_2_var1;
        int mode_2_3_var3;
    
    start:
        printf("该计算器有普通计算模式(1)特殊模式(2):\n");
        scanf("%d",&mode);
        if(mode == 1)
        {
            printf("||||||||||||||||||||模式1||||||||||||||||||||||||||\n");
            printf(" \n \n \n data1 op data2\n");
    input:
            scanf("%d %c %d",&data1,&op,&data2);
            switch(op)
            {
            case '+':
                printf("%d %c %d = %d\n",data1,op,data2,data1+data2);
                break;
            case '-':
                printf("%d %c %d = %d\n",data1,op,data2,data1-data2);
                break;
            case '*':
                printf("%d %c %d = %d\n",data1,op,data2,data1*data2);
                break;
            case '/':
                if(data2 == 0)
                {
                    printf("分母是零,请重新输入:");
                    goto input;
                }
                else
                {
                    printf("%d %c %d = %.3f\n",data1,op,data2,(float)data1/data2);//防止整除取整,强制转换data1为浮点型
                    break;
                }
            default: printf("该计算器没有此功能,请重新输入:");
                goto input;
            }
            goto loop;
        }
        else if(mode == 2)
        {
            printf("||||||||||||||||||||模式2|||||||||||||||||||||||||\n \n \n \n");
            printf("(1)开平方       (2)平方      \n");
            printf("(3)进制转换      (4)正在开发...\n");
            
            printf("\n \n请输入模式(1/2/3/4): ");
            scanf("%d",&mode_2);
            if(mode_2 == 1)
            {
                
                printf("_--------------------------模式1(开平方)---------------------\n \n");
                printf("输入格式为 --- num  :");
                scanf("%f",&mode_2_var1);
                printf("%f",sqrt(mode_2_var1));
                goto loop;
            }
            else if(mode_2 == 2)
            {
                printf("----------------------------模式2(平方)------------------------\n \n");
                printf("输入格式为 ---a b----(a的b次方)");
                float mode_2_2_var1,mode_2_2_var2;
                scanf("%f %f",&mode_2_2_var1,&mode_2_2_var2);
                printf("%.1f的%.1f次方为%.2f\n",mode_2_2_var1,mode_2_2_var2,pow(mode_2_2_var1,mode_2_2_var2));
                goto loop;
            }
            else if(mode_2 == 3)
            {
                printf("----------------------------模式3(进制转换) ---------------------\n \n");
                printf("请先输入数据的进制:");
                
    jinzhi:
                scanf("%d",&mode_2_3_var3);
                printf("输入格式为-----a c-----(a的b进制表示)(只能转换16,10,8进制)--------");
                
    jinzhi2:
                switch (mode_2_3_var3){//输入数据的键入格式
                case 8:
                    scanf("%o %d",&mode_2_3_number,&mode_2_3_jinzhi);
                    break;
                case 10:
                    scanf("%d %d",&mode_2_3_number,&mode_2_3_jinzhi);
                    break;
                case 16:
                    scanf("%x %d",&mode_2_3_number,&mode_2_3_jinzhi);
                    break;
                default: printf("你的进制数输入错误,请重新输入:");
                    goto jinzhi;
                }
                switch(mode_2_3_jinzhi)
                {
                case 8:
                    printf("%o\n",mode_2_3_number);
                    break;
                case 10:
                    printf("%d\n",mode_2_3_number);
                    break;
                case 16:
                    printf("%#x\n",mode_2_3_number);
                    break;
                default:
                    printf("进制输入错误,请重新输入:");
                    goto jinzhi2;
                }
            }
            else if(mode_2 == 4)
            {
                printf("开发人员正在开发,敬请期待!\n");
                goto loop;
            }
    loop: 
            printf("如果要继续输入请输入1,退出请按0\n");
            scanf("%d",&xunhuan4);
            if(xunhuan4 == 1)
            {
                goto start;
            }
            else if(xunhuan4 == 0)
            {
                goto end;
            }
        }
    end:
        printf("--------------------欢迎使用此计算器,再见!”---------------------------\n");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 创建了问题 12月26日

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历