免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2005 | 回复: 6
打印 上一主题 下一主题

超长超长代码找bug,求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-23 22:59 |只看该作者 |倒序浏览
模仿网络上的一个程序写了一个链表实现人员基本信息管理的程序,很长很长,bug也超多,求各位高手找出bug,互相学习,已知bug:保存时无法写入文本,list()为空,find()找不到联系人,保存时会凭空多出一条记录,代码很长,写的很仓促,希望大家耐心看,挺简单的倒是,还是求助各位找出问题所在.
代码:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. struct card
  4. {
  5.         char name[30];
  6.         char tel[30];
  7.         char zip[255];
  8.         struct card *pre;
  9.         struct card *next;
  10. };

  11. struct card *head;
  12. struct card *end;
  13. struct card *now = NULL;

  14. void uppoint();       
  15. void downpoint();
  16. void save();
  17. void new();
  18. void ver();
  19. void del();
  20. void list();
  21. void point();
  22. void quit();
  23. void find();
  24. void cls();

  25. void load();
  26. void command();
  27. void show(struct card *);
  28. void error(int);
  29. void trade(struct card *,struct card *);                //交换链表
  30. struct card *search(char *,int);

  31. void main()
  32. {
  33.         ver();
  34.         load();
  35.         command();
  36. }
  37. void command()
  38. {
  39.         char command[100];
  40.         printf("Card Master!\n");
  41.         for(;;)
  42.         {
  43.                 printf("CMD:");
  44.                 gets(command);
  45.                 if(strcmp(command,"new")==0) new();
  46.                 else if(strcmp(command,"del")==0) del();
  47.                 else if(strcmp(command,"find")==0) find();
  48.                 else if(strcmp(command,"list")==0) list();
  49.                 else if(strcmp(command,"point")==0) point();
  50.                 else if(strcmp(command,"quit")==0) quit();
  51.                 else if(strcmp(command,"cls")==0) cls();
  52.                 else if(strcmp(command,"ver")==0) ver();
  53.                 else if(strcmp(command,"save")==0) save();
  54.                 else if(strcmp(command,"uppoint")==0) uppoint();
  55.                 else if(strcmp(command,"downpoint")==0) downpoint();
  56.                 else error(0);
  57.         }
  58. }
  59. void show(struct card *person)
  60. {
  61.         printf("\n_______________________________\n");
  62.         printf("Name:%s\n",person->name);
  63.         printf("Tel:%s\n",person->tel);
  64.         printf("Zip:%s",person->zip);
  65.         printf("\n_______________________________\n");
  66. }
  67. void list()
  68. {
  69.         struct card *list;
  70.         int count = 0;
  71.         if(head->next = end)
  72.         {
  73.                 printf("This is an empty Card\n");
  74.                 return;
  75.         }
  76.         list = head->next;
  77.         for(;list->next;list = list->next)
  78.         {
  79.                 show(list);
  80.                 count++;
  81.         }
  82.         printf("Total %d\n\n",count);
  83. }
  84. void point()
  85. {
  86.         show(now);
  87. }
  88. void new()
  89. {
  90.         struct card *new;
  91.         new = malloc(sizeof(struct card));
  92.        
  93.         new->next = now->next;
  94.         new->pre = now;
  95.         now->next = new;
  96.        
  97.         now = new;
  98.        
  99.         printf("Enter Name:");
  100.         gets(new->name);
  101.         printf("Enter Tel:");
  102.         gets(new->tel);
  103.         printf("Enter Zip:");
  104.         gets(new->zip);
  105.        
  106.         printf("Now has been creatten a new crad\n\n");
  107.         show(new);
  108.         printf("\n");
  109. }
  110. void find()
  111. {
  112.         struct card *find;
  113.         char words[255];
  114.        
  115.         printf("FIND...\n");
  116.         printf("Enter your search about?(name/tel)\n");
  117.         gets(words);
  118.        
  119.         if((strcmp(words,"name")==0))
  120.         {
  121.                 printf("Enter Name:");
  122.                 gets(words);
  123.                 find = search(words,0);
  124.                
  125.                 if(find = NULL)
  126.                 {
  127.                         error(1);
  128.                         return;
  129.                 }
  130.                 else
  131.                 {
  132.                         show(find);
  133.                         now = find;
  134.                         return;
  135.                 }
  136.         }
  137.         if((strcmp(words,"tel")==0))
  138.         {
  139.                 printf("Enter Tel:");
  140.                 gets(words);
  141.                 find = search(words,1);
  142.                 if(!find)
  143.                 {
  144.                         error(1);
  145.                         return;
  146.                 }else
  147.                 {
  148.                         show(find);
  149.                         now = find;
  150.                         return;
  151.                 }
  152.         }
  153.         printf("Error\n\n");
  154. }
  155. struct card *search(char *words,int type)
  156. {
  157.         struct card *search;
  158.         search = head->next;
  159.        
  160.         if(type == 0)
  161.         {
  162.                 for(;search->next;search = search->next)
  163.                 {
  164.                         if(strcmp(search->next,words)==0)
  165.                                 return search;
  166.                 }
  167.                 return NULL;
  168.         }
  169.         if(type = 1)
  170.         {
  171.                 for(;search->next;search = search->next);
  172.                 {
  173.                         if(strcmp(search->tel,words)==0)
  174.                                 return search;
  175.                 }
  176.                 return NULL;
  177.         }
  178. }
  179. void quit()
  180. {
  181.         char words[10];
  182.         printf("Quit,are you sure?(Y/N)");
  183.         gets(words);
  184.         if(strcmp(words,"Y")!=0)
  185.         {
  186.                 printf("Ok,continue\n");
  187.                 return;
  188.         }
  189.         exit(0);
  190. }
  191. void error(int type)
  192. {
  193.         if(type == 0)
  194.         {
  195.                 printf("Bad command!\n");
  196.                 return;
  197.         }
  198.         if(type == 1)
  199.         {
  200.                 printf("find Nothing\n");
  201.                 return;
  202.         }
  203. }
  204. void del()
  205. {
  206.         struct card *temp;
  207.         char words[255];
  208.        
  209.         if(head->next = NULL)
  210.         {
  211.                 error(1);
  212.                 return;
  213.         }
  214.         show(now);
  215.         printf("It will delete this card,are you sure?(yes/no)\n");
  216.         gets(words);
  217.         if(strcmp(words,"yes")!=0)
  218.         {
  219.                 printf("do nothing\n");
  220.                 return;
  221.         }
  222.         now->next->pre = now->pre;
  223.         now->pre->next = now->next;
  224.         free(now);
  225.         printf("Now has been delete this record\n");
  226. }
  227. void cls()
  228. {
  229.         int i;
  230.         for(i = 0;i<60;i++)
  231.                 printf("\n");
  232. }
  233. void ver()
  234. {
  235.         printf("\n___________________________________\n");
  236.         printf("\n Build by leekic");
  237.         printf("\n___________________________________\n");
  238.         printf("\n\n");
  239. }
  240. void load()
  241. {
  242.         FILE *fp;
  243.         struct card *load;
  244.         struct card *temp;
  245.         if((fp = fopen("card.log","a+"))==NULL)
  246.         {
  247.                 printf("cannot create files\n\n");
  248.                 return;
  249.         }
  250.         printf("Loading\n");
  251.        
  252.         head = malloc(sizeof(struct card));
  253.         end = malloc(sizeof(struct card));
  254.         head->pre = NULL;
  255.         head->next = end;
  256.         end->pre = head;
  257.         end->next = NULL;
  258.        
  259.         strcpy(head->name,"HEAD");
  260.         strcpy(head->tel,"HEAD");
  261.         strcpy(head->zip,"HEAD");
  262.        
  263.         strcpy(end->name,"END");
  264.         strcpy(end->tel,"END");
  265.         strcpy(end->tel,"END");
  266.        
  267.         now = head;
  268.        
  269.         while(!feof(fp))
  270.         {
  271.                 load = malloc(sizeof(struct card));
  272.                 fread(load,sizeof(struct card),1,fp);
  273.                 load->next = now->next;
  274.                 load->pre = now;
  275.                 now->next = load;
  276.                 now = load;
  277.         }
  278.         fclose(fp);
  279.        
  280.         printf("load files finished\n");
  281.         return;
  282. }
  283. void save()
  284. {
  285.         FILE *fp;
  286.         struct card *save;
  287.         char words[10];
  288.         printf("It will change file,are your sure?(yes/no)");
  289.         gets(words);
  290.         if((strcmp(words,"yes")!=0))
  291.         {
  292.                 printf("nothing to do\n");
  293.                 return;
  294.         }
  295.        
  296.         if((fp=fopen("card.log","a+"))==NULL)
  297.         {
  298.                 printf("Can't save file\n");
  299.                 return;
  300.         }
  301.         save = head->next;
  302.         for(;save->next;save = save->next)
  303.         {
  304.                 if((fwrite(save,sizeof(struct card),1,fp)));
  305.                 {
  306.                         printf("writing...\n");
  307.                 }
  308.         }
  309.         printf("Save finished\n");
  310. }
  311. void uppoint()
  312. {
  313.         if(now->pre = head)
  314.         {
  315.                 printf("Sorry,can not move Top\n");
  316.                 return;
  317.         }
  318.         printf("Trade cards:");
  319.         show(now);
  320.         show(now->pre);
  321.         trade(now->pre,now);
  322.         printf("Trade finished\n");
  323. }
  324. void downpoint()
  325. {
  326.         if(now->next = end)
  327.         {
  328.                 printf("Sorry can not move END!\n");
  329.                 return;
  330.         }
  331.         printf("Trade cards:");
  332.         show(now);
  333.         show(now->next);
  334.         trade(now,now->next);
  335.         printf("Trade finished!\n");
  336. }
  337. void trade(struct card *a,struct card *b)
  338. {
  339.         a->pre->next = b;
  340.         b->next->pre = a;
  341.        
  342.         a->next = b->next;
  343.         b->pre = a->next;
  344.        
  345.         a->next = b;
  346.         b->next = a;
  347. }
复制代码

论坛徽章:
2
戌狗
日期:2013-11-06 17:35:36寅虎
日期:2014-10-20 23:12:29
2 [报告]
发表于 2010-07-23 23:08 |只看该作者
自己专心去调试了

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2010-07-23 23:13 |只看该作者
作业呀

论坛徽章:
0
4 [报告]
发表于 2010-07-24 02:16 |只看该作者
鄙视你,从网上抄的答案。。
需要解决的话,M我, 200块。

论坛徽章:
0
5 [报告]
发表于 2010-07-24 11:20 |只看该作者
鄙视你,从网上抄的答案。。
需要解决的话,M我, 200块。
peidright 发表于 2010-07-24 02:16



    这么平?

论坛徽章:
0
6 [报告]
发表于 2010-07-24 12:21 |只看该作者
回复 5# qishking


    {:3_184:} 穷死了。。

论坛徽章:
0
7 [报告]
发表于 2010-07-24 20:34 |只看该作者
哈哈,好吧,等有时间了我自己debug了.估计你们都没看一眼,鄙视,哈哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP