微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问哪位大神可以帮我看看这个代码,为什么没办法实现单词训练和输出所有的单词

请问哪位大神可以帮我看看这个代码,为什么没办法实现单词训练和输出所有的单词

时间:10-02 整理:3721RD 点击:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
struct word
{
        char chinese[30];
        char english[30];
};
int main()
{
        int point=0,count1=0,count=0,n;
        int *p,*c1,*c;
        p=&point;
        c1=&count1;
        c=&count;
        struct word str[100];
        char ch;
        void tianjia(struct word str[100],int *c);
        void shuchu(struct word str[100],int *c);
        void fanyi1(struct word str[100],int *c,int *c1,int *p);
        void fanyi2(struct word str[100],int *c,int *c1,int *p);
        void chaxun(struct word str[100],int *c,int *c1,int *p);
        void change();
        while(1)
        {
                change();
                printf("请输入您要的操作选择:\n");
                scanf("%d",&n);
                switch(n)
                {
                        case 1:tianjia(str,c);break;
                        case 2:fanyi1(str,c,c1,p);break;
                        case 3:fanyi2(str,c,c1,p);break;
                        case 4:shuchu(str,c);break;
                        case 5:chaxun(str,c,c1,p);break;
                        case 0: {
                                        printf("您确定要退出此操作吗?yes/no?\n");
                                        scanf("%c",&ch);
                                        if(ch=='y'||ch=='Y') exit(0);
                                        }
                        default:printf("您输入了错误的操作,无法执行!");
                                        exit(0);
                }
        }
        while(1);
        return 0;
}
void change()
{
        printf("*************单词系统****************\n");
        printf("************1.单词输入***************\n");
        printf("************2.英译汉训练*************\n");
        printf("************3.汉译英训练*************\n");
        printf("************4.输出所有单词及对应中文*\n");
        printf("************5.训练成绩查询***********\n");
        printf("************0.退出*************\n");
}
void tianjia(struct word str[100],int *c)
{
        char a;
        int count=0;
        c=&count;
        do
        {
                printf("单词输入!\n请输入要录入词库的英文单词:\n");
                scanf("%s",str[count].english);
                printf("\n请输入相应的中文意思:\n");
                scanf("%s",str[count].chinese);
                count++;
                printf("是否继续添加单词?y/n?\n");
                scanf("%s",&a);
        }while(a=='y');
        printf("输入单词个数为:%d\n",count);
}
void shuchu(struct word str[100],int *c)
{       
        int i,count;
        struct word *a;
        a=str;
        count=*c;
        printf("输出词库中所有的单词!\n");
        if(count<=0)
                printf("词库中没有单词,无法输出!\n");
        else
        {
                for(i=0;i<count;i++,a++)
                printf("单词:%s  %s\n",a->english,a->chinese);
                printf("\n");
        }
        printf("词库中所有单词已输出!\n");
}
void fanyi1(struct word str[100],int *c,int *c1,int *p)
{
        int i,point,count1;
        c1=&count1;
        p=&point;
        char ch[30];
        printf("现在进行英译汉训练!\n");
        for (i=0;i<(*c);i++)
        {
                printf("英文单词:%s\n",str[i].english);
                printf("请输入中文翻译:");
                scanf("%s",ch);
                if(strcmp(ch,str[i].chinese)==0)
                {
                        point++;
                        count1++;
                        printf("恭喜你,答对了!\n");
                }
                else
                {
                        count1++;
                        printf("很遗憾,你答错了,再接再厉!\n正确的翻译是:%s\n",str[i].chinese);
                }
        }
}
void fanyi2(struct word str[100],int *c,int *c1,int *p)
{
        int i,point,count1;
        c1=&count1;
        p=&point;
        char en[30];
        printf("现在进行汉译英训练!\n");
        for (i=0;i<*c;i++)
        {
                printf("中文意思:%s\n",str[i].chinese);
                printf("请输入英文单词:");
                scanf("%s",en);
                if(strcmp(en,str[i].english)==0)
                {
                        point++;
                        count1++;
                        printf("恭喜你,答对了!\n");
                }
                else
                {
                        count1++;
                        printf("很遗憾,你答错了,再接再厉!\n正确的翻译是:%s\n",str[i].english);
                }
        }       
}
void chaxun(struct word str[100],int *c,int *c1,int *p)
{
        printf("本次测试成绩是:\n");
        printf("测试次数为:%d\n",*c1);
        printf("正确次数为:%d\n",*p);
        printf("本次测试的正确率为:%d\%\n",*p *100/ *c1);
        if((*p *100/ *c1)<60)
                printf("有待提高,继续努力!");
        else if(60<=(*p *100/ *c1)&&(*p *100/ *c1)<80)
                printf("成绩良好,再接再厉");
        else if((*p *100 / *c1)>=80)
                printf("成绩优秀,继续保持");
       
}

第一次看函数声明可以在main里面

没有人解答吗?

很有创意,我怎么从来就没这么想过?

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct strWord
{
        char strChinese[30];
        char strEnglish[30];
}STRWORD,*PSTRWORD;
STRWORD strBuf[100];
void TianJia(PSTRWORD pStrBuf,int *pCnt)
{
        char a;
        do
        {
                printf("单词输入!\n请输入要录入词库的英文单词:\n");
                scanf("%s",pStrBuf[*pCnt].strEnglish);
                printf("\n请输入相应的中文意思:\n");
                scanf("%s",pStrBuf[*pCnt].strChinese);
                (*pCnt)++;
                printf("是否继续添加单词?y/n?\n");
                scanf("%s",&a);
        }while(a=='y');
        printf("输入单词个数为:%d\n",*pCnt);
}
int main()
{
    int iCount=0;
   TianJia(strBuf,&iCount);
}
大致是如此了,剩下的自己改吧。

1)函数声明要放到主函数外,或者.h文件中,函数体如果在 main()函数前面就不用声明了。
2)fun(struct word str[100]) 形参应该是  fun(word str[]),或使用指针代替
3)int Count ; fun(int *c) 可以直接 fun(&Count)
4) scanf("%s",&a); 有内存访问越界的嫌疑。

好的,我试试,谢谢你

另外建议你采用渐进开发模式。功能要一点一点添加,测试通过一个功能后再添加下一个功能。

请问为什么我在VC++ 6.0可以运行,到了DEV C++就不可以了

不知道,没用过 DEV C

好吧,谢谢你了

请问在吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top