| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 308 人关注过本帖
标题:求修改注释不到位的地方
只看楼主 加入收藏
Lazy00Angel
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
求修改注释不到位的地方
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define WORD 12//定义WORD的值为12
#define STRN 20//定义STRN的值为20
#define ITEM sizeof(struct TItem)//定义ITEM的值为struct TItem;
char cidian[STRN];//定义长度为STRN(20)的字符型数组cidian


typedef struct TItem//给已知数据类型struct起个新名字,叫TItem
{
 char word[WORD];//定义字符型数组word,长度为WORD(20)
 char mean[STRN];//定义字符型数组mean,长度为STRN(12)
} Item;//新的数据类型名字可为Item


fpos_t lookup(char *word, char *mean)//定义字符型指针word和mean,以mean为条件查找word
{
 FILE * fp= 0; Item i;//定义FILE * fp= 0,i的数据类型为Item
 int r = 0;  p = 0;
 if(!word) return 0;
 fp= fopen(cidian, "rb");//以二进制只读方式打开数组cidian
 if (!fp)//判断文件指针fp是否为空
 return 0;//为空则函数结束
 while(!feof(fp))//当fp不为空时判断是否结尾,是则进行while函数,否则结束函数
 {
  fgetpos(fp, &p);
  r = fread(&i, ITEM, 1, fp);//统计长度,根据指针移动的长度计算出单词的长度
  if(r < 1) break;//如果r<1(读取失败),跳出循环
  if(i.word[0] == 0) continue;//
  if(strcmp(i.word , word)) continue;
  if(mean) strcpy(mean, i.mean );
  fclose(fp);//关闭前面打开的流文件fp(cidian)
  return p+1;//函数结束,并返回1
 }
 fclose(fp);//关闭前面打开的流文件fp(cidian)
 return 0;//返回0
}

void find()//单词查找函数
{
 Item i; fpos_t p = 0;
 memset(&i, 0, ITEM);//将地址i中前ITEM个字节用0替换并返回0
 printf("请输入单词:"); scanf("%s", i.word );//输入字符串给i.word
 p = lookup(i.word, i.mean );//调用函数lookup
 if(p==0)
 {
  printf("字典内没有该单词记录!\n");//如果p=0,输出语句
  return;//结束函数
 }
 printf("释义是:%s",i.mean );//如果p不为0,输出i.mean
}

int main(int argc, char * argv[])//主函数有arge和argv两个参数
{
 int cmd = 0;//定义cmd为整形,值为0
 if(argc >1)//如果arge>1
  strcpy(cidian, argv[1]);//将argv{1}复制到cidian
 else//否则
  strcpy(cidian, "E:\\单词表.txt");//调用E:\\单词表上的文件
 for(;;)
 {
printf("\n\
**************************\n\
**  欢迎使用迷你小词典!**\n\
**************************\n\
**    1 - 查询单词      **\n\
**    2 - 新增单词      **\n\
**    3 - 编辑单词      **\n\
**    4 - 删除单词      **\n\
**    5 - 退出字典      **\n\
**************************\n");
  cmd = getch() - '0';//输入一个字符给cmd,但是不显示出来
  switch(cmd)//对cmd的值进行判断
  {
  case 1: find(); break;//如果是1,则调用find函数用于查找单词
  case 2: append(); break;//如果是2,则电泳append函数用于增加单词
  case 3: edit(); break;//如果是3,则电泳edit函数编辑单词
  case 4: erase(); break;//如果是4,则调用erase函数删除单词
  default: return 0;//都不是则主函数结束
  }
 }
 return 0;
}

[ 本帖最后由 Lazy00Angel 于 2012-12-23 00:10 编辑 ]
搜索更多相关主题的帖子: include 
2012-12-22 17:17
Lazy00Angel
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-22
收藏
得分:0 
完全不懂啊,跪求帮助
2012-12-22 19:00
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:10 
广度优先搜索可以   不过人家的模糊搜索肯定没有这么简单

                                         
===========深入<----------------->浅出============
2012-12-22 20:05
Lazy00Angel
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-22
收藏
得分:0 
回复 3楼 laoyang103
其实我想要的效果不用太复杂,能用*代替所有字母就行,比如student不会拼,可以用stu**t代替
2012-12-22 20:19
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:10 
可以做个循环啊,用所有字母一个一个的代替后strcmp检测是否有相同的,如果所有字符试过后都没有就输出提示语后退出,不过得先检查*出现的次数及其位置,可以储存在一个int数组中,
 不过事先不知道用户会输入多少个*,所以无法使用一堆有效的循环去读取,得用递归,在函数的循环中跑遍字母,同时将count-1(*出现的次数)及其修改后的字符串带入递归,检测出为最后一个*就返回,不过需把递归包含在循环内,因为上一个函数每改动一个字母就又要检查一次,同时带入的需为字符串的指针,因为需要改动字符串的值,不然递归后值就和原来的一样了。
好吧看起来是有点复杂了...

I have not failed completely
2012-12-24 22:36
快速回复:求修改注释不到位的地方
数据加载中...
 
   



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

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