Gee. 2022-03-01 10:54 采纳率: 53.3%
浏览 77
已结题

C语言关键字中英翻译机程序不能实现我想要的功能,请问一下我的代码要怎么改?

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

运行没有出现错误,但是运行出来无法实现该有的功能

问题相关代码,请勿粘贴截图

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

void main()
{
char *e[]={"auto","case","char","const","continue","default",
"do","double","else","enum","extern","float","for","goto","if",
"int","long","register","return","short","signed","sizeof","static",
"struct","switch","typedef","unsigned","union","void","volatile","while"};

char *c[]={"声明变量","声明自动变量","跳出当前循环","开关语句分支",

"声明字符型变量或函数返回值类型","声明只读变量","结束当前循环并开始下一轮循环","开关语句中的默认分支",

"循环语句的循环体","声明双精度浮点型变量或函数返回值类型","条件语句否定分支",

"声明枚举类型","声明变量或函数是在其他文件或本文件的其他位置定义","声明浮点型变量或函数返回值","一种循环语句","无条件跳转语句",

"条件语句","声明整型变量或函数","声明长整型变量或函数返回值","声明寄存器变量","子程序返回语句(可以带参数,也可以不带参数)",

"声明短整型变量或函数返回值","声明有符号类型变量或函数","计算数据类型或变量长度","声明静态变量","声明结构体类型",

"用于开关语句","用以给数据类型取别名","声明无符号类型变量或函数","声明共用体类型","声明函数无返回值或无参数,声明无类型指针",

"说明变量在程序执行中可被隐含地改变","循环语句的循环条件"};//一共31个关键字

int a,i,j;
char k[50];
printf("欢迎使用C语言关键字中英翻译机!\n");
printf("请输入a的值(输入0为中译英,输入1为英译中):");
scanf("%d",a);
if(a==0)
{
    for(i=0;i<100;i++)
    {
        printf("请输入中文的C语言关键字:");
        scanf("%s",k);
        if(strcmp(k,"bye")==0)exit(0);
        for(j=0;j<10;j++)
        {
            if(strcmp(k,*c[j])==0)
            {
                printf("%s对应的英文是%s\n",*c[j],*e[j]);
                break;
            }
        }
    }
}

if(a==1)
{
    for(i=0;i<100;i++)
    {
        printf("请输入英文的C语言关键字:");
        scanf("%s",k);
        if(strcmp(k,"bye")==0)exit(0);
        for(j=0;j<10;j++)
        {
            if(strcmp(k,*e[j])==0)
            {
                printf("%s对应的中文是%s",*e[j],*c[j]);
                break;
            }
        }
    }
}

}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • yun6853992 2022-03-01 11:16
    关注

    有一些代码细节关注一下,建议可以用beyond compare工具对比一下我的代码和你的代码,思考这些代码细节。
    主要问题就是,
    第一:注意用数组存储字符串时,数组最好提前初始化为0,或者在输入字符串的最后塞终结符'\0'
    第二:注意指针数组的用法,通过指针取每个数组中的字符串的方法。 (取字符串本身就是取首地址,然后一直找终结符'\0',指针也是指向一个地址) 可以了解一下指针数组存储字符串的逻辑~

    简单输入进行测试了一下,中英都是ok的,但是可能覆盖不全

    img

    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
        int main()
        {
            const char* e[] = { "auto","case","char","const","continue","default",
            "do","double","else","enum","extern","float","for","goto","if",
            "int","long","register","return","short","signed","sizeof","static",
            "struct","switch","typedef","unsigned","union","void","volatile","while" };
    
           const  char* c[] = { "声明变量","声明自动变量","跳出当前循环","开关语句分支",
    
            "声明字符型变量或函数返回值类型","声明只读变量","结束当前循环并开始下一轮循环","开关语句中的默认分支",
    
            "循环语句的循环体","声明双精度浮点型变量或函数返回值类型","条件语句否定分支",
    
            "声明枚举类型","声明变量或函数是在其他文件或本文件的其他位置定义","声明浮点型变量或函数返回值","一种循环语句","无条件跳转语句",
    
            "条件语句","声明整型变量或函数","声明长整型变量或函数返回值","声明寄存器变量","子程序返回语句(可以带参数,也可以不带参数)",
    
            "声明短整型变量或函数返回值","声明有符号类型变量或函数","计算数据类型或变量长度","声明静态变量","声明结构体类型",
    
            "用于开关语句","用以给数据类型取别名","声明无符号类型变量或函数","声明共用体类型","声明函数无返回值或无参数,声明无类型指针",
    
            "说明变量在程序执行中可被隐含地改变","循环语句的循环条件" };//一共31个关键字
    
            int a, i, j;
            char k[50] = {0};
            printf("欢迎使用C语言关键字中英翻译机!\n");
            printf("请输入a的值(输入0为中译英,输入1为英译中):");
            scanf_s("%d", &a);
            if (a == 0)
            {
                for (i = 0; i < 100; i++)
                {
                    printf("请输入中文的C语言关键字:");
                    scanf_s("%s", k,50);
                    if (strcmp((const char*)k, "bye") == 0)
                    {
                        exit(0);
                    }
                    for (j = 0; j < 10; j++)
                    {
                        if (strcmp(k, c[j]) == 0)
                        {
                            printf("%s对应的英文是%s\n", c[j], e[j]);
                            break;
                        }
                    }
                }
            }
    
            if (a == 1)
            {
                for (i = 0; i < 100; i++)
                {
                    printf("请输入英文的C语言关键字:");
                    scanf_s("%s", k, 50);
                    if (strcmp((const char*)k, "bye") == 0)
                    {
                        exit(0);
                    }
                        
                    for (j = 0; j < 10; j++)
                    {
                        if (strcmp(k, e[j]) == 0)
                        {
                            printf("%s对应的中文是%s \n", e[j], c[j]);
                            break;
                        }
                    }
                }
            }
            return 0;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助