鱼C论坛

 找回密码
 立即注册
查看: 3322|回复: 4

求助这段代码!!

 关闭 [复制链接]
发表于 2011-6-19 23:40:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 friyatre 于 2011-6-20 09:04 编辑

  1. #include <stdio.h>

  2. int comparison(char str1[],char *str2)
  3. {
  4. int i;
  5. for(i=0;i<10;i++)
  6. {
  7.   if(str1[i] == '\0' && str2[i] == '\0')
  8.   {
  9.    return 1;
  10.    break;
  11.   }
  12.   else if (str1[i] != str2[i])
  13.   {
  14.    return 0;
  15.    break;
  16.   }
  17.   else
  18.   {
  19.    continue;
  20.   }
  21. }
  22. }
  23. void main()
  24. {
  25. struct num
  26. {
  27.   int nubers;
  28.   char *name;
  29. };
  30. struct num sum[4]={{0,"鱼"},{0,"仓"},{0,"吴"},{0,"苏"}};
  31. char str[10];
  32. int n,i;
  33. int a[3];
  34. int comparison(char str1[],char *str2);
  35. for (n=1;n<4;n++)
  36. {
  37.   printf("第%d位投票人:",n);
  38.   scanf("%s",str);
  39.   if(comparison(str,sum[0].name))
  40.   {
  41.    ++sum[0].nubers;
  42.    
  43.   }
  44.   else if (comparison(str,sum[1].name))
  45.   {
  46.    ++sum[1].nubers;
  47.   }
  48.   else if (comparison(str,sum[2].name))
  49.   {
  50.    ++sum[2].nubers;
  51.   }
  52.   else if (comparison(str,sum[3].name))
  53.   {
  54.    ++sum[3].nubers;
  55.   }
  56.   else
  57.   {
  58.    continue;
  59.   }
  60. }
  61. for (i=0;i<4;i++)
  62. {
  63.   a[i] = sum[i].nubers;
  64. }
  65. printf("%s的得票数是:%d\n",sum[0].name,a[0]);
  66. printf("%s的得票数是:%d\n",sum[1].name,a[1]);
  67. printf("%s的得票数是:%d\n",sum[2].name,a[2]);
  68. printf("%s的得票数是:%d\n",sum[3].name,a[3]);

  69. }
复制代码
这段代码如果各人得票数为0时,main函数的第2个for语句出现死循环,求帮忙,如果可以,希望能告知为什么会这样,非常感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-20 08:59:29 | 显示全部楼层
有人帮忙看下么?自己顶一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-20 09:00:20 | 显示全部楼层
  1. #include <stdio.h>



  2. int comparison(char str1[],char *str2)

  3. {

  4. int i;

  5. for(i=0;i<10;i++)

  6. {

  7.   if(str1 == '\0' && str2 == '\0')

  8.   {

  9.    return 1;

  10.    break;

  11.   }

  12.   else if (str1 != str2)

  13.   {

  14.    return 0;

  15.    break;

  16.   }

  17.   else

  18.   {

  19.    continue;

  20.   }

  21. }

  22. }

  23. void main()

  24. {

  25. struct num

  26. {

  27.   int nubers;

  28.   char *name;

  29. };

  30. struct num sum[4]={{0,"鱼"},{0,"仓"},{0,"吴"},{0,"苏"}};

  31. char str[10];

  32. int n,i;

  33. int a[4] = {0,0,0,0};       //数组越界了,因为数组越界改变了i的值

  34. int comparison(char str1[],char *str2);

  35. for (n=1;n<4;n++)

  36. {

  37.   printf("第%d位投票人:",n);

  38.   scanf("%s",str);

  39.   if(comparison(str,sum[0].name))

  40.   {

  41.    ++sum[0].nubers;

  42.    

  43.   }

  44.   else if (comparison(str,sum[1].name))

  45.   {

  46.    ++sum[1].nubers;

  47.   }

  48.   else if (comparison(str,sum[2].name))

  49.   {

  50.    ++sum[2].nubers;

  51.   }

  52.   else if (comparison(str,sum[3].name))

  53.   {

  54.    ++sum[3].nubers;

  55.   }

  56.   else

  57.   {

  58.    continue;

  59.   }

  60. }

  61. for (i=0;i<4;i++)

  62. {

  63.   a = sum.nubers;

  64. }

  65. printf("%s的得票数是:%d\n",sum[0].name,a[0]);

  66. printf("%s的得票数是:%d\n",sum[1].name,a[1]);

  67. printf("%s的得票数是:%d\n",sum[2].name,a[2]);

  68. printf("%s的得票数是:%d\n",sum[3].name,a[3]);



  69. }
复制代码
高地址 | i | a[3] | a[2] | a[1] | a[0] | 低地址
数组越界了, 改变了i的值, 有的编译器做了优化了, 但是越界大了也会改变i的值
,6.0不知道优化了没。    把  int a[3]改成int a[4];

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-20 09:04:06 | 显示全部楼层
还是我自己粗心啊,汗啊!!看到了...谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-20 19:24:58 | 显示全部楼层
没学C语言 看的不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 05:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表