| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2138 人关注过本帖
标题:期末课程设计运行时出问题,恳求前辈能指正
只看楼主 加入收藏
欧阳艺文
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
期末课程设计运行时出问题,恳求前辈能指正
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define maxlen 1000
#define strlen1 20
#define strlen2 40
void menu();/*显示控制菜单*/
void lookup();/*查询单词释义*/
void input();/*读取电子词典*/
void insert();/*插入词条*/
void del();/*删除词条*/
void modify();/*修改词条*/
void quit();/*退出词典程序*/
void conti();/*重复执行操作*/
int search1(int len,char word);
int search2(int len,char word);
char *words[maxlen];
char *expls[maxlen];
int len,flag=0;

int main()/*主函数*/
{
    int num;
    input();
    while(!flag)
    {
         menu();
         scanf("%d",&num);
         switch(num)
         {
           case 1:lookup();break;
           case 2:insert();break;
           case 3:del();break;
           case 4:modify();break;
           case 5:quit();break;
         }                                                                              
    }
}
void input()/*读取词典*/
{
    int i=0;
    FILE *fp;
    char str[strlen1],temp[strlen2];
    if((fp=fopen("f2.txt","r"))==NULL)
    {
        printf("file open error!\n");
        exit(0);
    }
    fscanf(fp,"%s",str);
    while(!feof(fp))
    {
        i=i+1;
        words[i]=str;
        fscanf(fp,"%s",temp);
        expls[i]=temp;
        fscanf(fp,"%s",str);
    }
    len=i;
    fclose(fp);
}
void menu()
{
    system("cls");
    printf("电子词典程序\n");
    printf("说明:在本系统中与执行某功能请输入相应数字\n");
    printf("1-查询单词释义\n");
    printf("2-插入词条\n");
    printf("3-删除词条\n");
    printf("4-修改词条\n");
    printf("5-退出词典程序\n");
}
void lookup()/*查询单词释义*/
{
    char word[strlen1];
    int i;
    flag=1;
    while(flag)
    {
        printf("请输入查询单词:\n");
        scanf("%s",word);
        i=search1(len,word[strlen1]);
        if(i==-1)
            printf("无此单词!\n");
        else
            printf("%s\n",expls[i]);
        conti();
    }
}
void insert()/*插入词条*/
{
    char word[strlen1];
    char expl[strlen2];
    int i,j;
    flag=1;
    while(flag)
    {
        printf("请输入待输入的单词和释义\n");
        scanf("%s%s",word,expl);
        i=search2(len,word[strlen1]);
        if(i==-1)
          printf("已有此单词!\n");
        else
        {
            for(j=len;j>i;j--)
            {
                strcpy(words[j],words[j-1]);
                strcpy(expls[j],expls[j-1]);
            }
            strcpy(words[i],word);
            strcpy(expls[i],expl);
            len++;
        }
        conti();
    }
}
void del()/*删除词条*/
{
    char word[strlen1];
    int i,j;
    flag=1;
    while(flag)
    {
        printf("请输入待删除的单词:\n");
        scanf("%s",word);
        i=search1(len,word[strlen1]);
        if(i==-1)
            printf("无此单词:\n");
        else
        {
            for(j=i;j<len;j++)
            {
                strcpy(words[j],words[j+1]);
                strcpy(expls[j],expls[j+1]);
            }
            len--;
        }
        conti();
    }
}
void modify()
{
     char word[strlen1];
     char expl[strlen2];
    int i;
    flag=1;
    while(flag)
    {
        printf("输入待修改的单词:\n");
        scanf("%s",word);
        i=search1(len,word[strlen1]);
        if(i==-1)
            printf("无此单词:\n");
        else
        {
            printf("输入释义:\n");
            scanf("%s",expl);
            strcpy(expls[i],expl);
        }
        conti();
    }
}
void quit()/*退出词典程序*/
{
    int i;
    FILE *fp;
    char ch;
    printf("是否存入词典(y/n)?\n");
    ch=getch();
    if(ch=='Y'||ch=='y')
    {
        if((fp=fopen("f1.docx","w"))==NULL)
        {
            printf("file open error\n");
            exit(0);
        }
        for(i=0;i<len;i++)
            fprintf(fp,"%-20s%-40s\n",words[i],expls[i]);
        fclose(fp);
    }
    flag=1;
}
int search1(int len,char word)
{
    int l=0;
    int r=len -1;
    {
        int m;
        while(l<=r)
        {
            m=(l+r)/2;
            char *temp;
            temp=&word;
            if(strcmp(temp,words[m])==0)
                return m;
            else if(strcmp(temp,words[m])>0)
                l=m+1;
            else
                l=m-1;
        }
        return -1;
    }
}
int search2(int len,char word)/*查找插入位置*/
{
    int r=len-1;
    int l=0;
    {
        int m;
        while(l<r)
        {
            m=(l+r)/2;
            char *tem;
            tem=&word;
            if(strcmp(tem,words[m])==0)
                return m;
            else if(strcmp(tem,words[m])>0)
                l=m+1;
            else
                l=m-1;
        }
        return -1;
    }   
   
}
void conti()/*重复执行操作*/
{
    char ch;
    printf("继续执行吗(Y/N)?");
    ch=getch();
    if(ch=='Y'||ch=='y')
        flag=1;
    else
        flag=0;
}
搜索更多相关主题的帖子: include insert modify 电子词典 课程 
2016-06-16 17:26
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:10 
void input()/*读取词典*/
{
    int i=0;
    FILE *fp;
    char str[strlen1],temp[strlen2];
    if((fp=fopen("f2.txt","r"))==NULL)
    {
        printf("file open error!\n");
        exit(0);
    }
    fscanf(fp,"%s",str);
    while(!feof(fp))
    {
        i=i+1;
        words[i]=str;
        fscanf(fp,"%s",temp);
        expls[i]=temp;
        fscanf(fp,"%s",str);
    }
    len=i;
    fclose(fp);
}   

程序代码:
if((fp=fopen("f2.txt","r"))==NULL)
    {
        printf("file open error!\n");
        exit(0);
    }

上面这一段,楼主试着这样写:
fp=fopen("f2.txt","r");
if((fp==NULL)
    {
        printf("file open error!\n");
        exit(0);
    }
另外,如果目录下没有f2.txt也会导致读取失败的.

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-06-16 20:22
欧阳艺文
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-16
收藏
得分:0 
谢谢
我把程序分开测试过,读取没有问题,问题是出在
int search1(int len,char word)//查询单词位置
{
    int l=0;
    int r=len -1;
    {
        int m;
        while(l<=r)
        {
            m=(l+r)/2;
            char *temp;
            temp=&word;
            if(strcmp(temp,words[m])==0)
                return m;
            else if(strcmp(temp,words[m])>0)
                l=m+1;
            else
                l=m-1;
        }
        return -1;
    }
这段函数他只能返回-1,所以导致运行时只显示、无此单词!
2016-06-16 20:56
cheetah
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:119
专家分:118
注 册:2013-6-29
收藏
得分:10 
非常讨厌这样的问题,运行时出什么问题不说,要我们猜吗?

天道酬勤
2016-06-16 20:57
欧阳艺文
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-16
收藏
得分:0 
sorry,问题就是运行时当你输入要查找的单词时,总是显示无此单词,我觉得是int search1(int len,char word)//查询单词位置这个模块出问题了,应为他只返回-1,
2016-06-16 21:34
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
我不明白,你为什么要return -1.是抄别人的代码吗?
return 什么值,是根据你函数调用的需要。而不是一定要return -1.

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-06-16 21:37
欧阳艺文
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-16
收藏
得分:0 
是这样的,不是-1也行,就是当return -1 void output模块就会根据返回值判断是哪个单词,return -1时就代表无此单词,比如当返回1时void output就会显示出与1这位置相对应的中文意思。
现在问题就是查找单词int search1(int len,char word)//查询单词位置这个模块不能正常返回值,只能返回-1,如果把原函数return -改写为别的数他就仅仅返回这个数
2016-06-16 22:14
快速回复:期末课程设计运行时出问题,恳求前辈能指正
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015749 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved