运行没有出现错误,但是运行出来无法实现该有的功能
#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;
}
}
}
}
}
有一些代码细节关注一下,建议可以用beyond compare工具对比一下我的代码和你的代码,思考这些代码细节。
主要问题就是,
第一:注意用数组存储字符串时,数组最好提前初始化为0,或者在输入字符串的最后塞终结符'\0'
第二:注意指针数组的用法,通过指针取每个数组中的字符串的方法。 (取字符串本身就是取首地址,然后一直找终结符'\0',指针也是指向一个地址) 可以了解一下指针数组存储字符串的逻辑~
简单输入进行测试了一下,中英都是ok的,但是可能覆盖不全
#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;
}
scanf(“ ”,&a)