鱼C论坛

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

求助这段代码!!

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

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

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

x
本帖最后由 friyatre 于 2011-6-20 09:04 编辑
#include <stdio.h>

int comparison(char str1[],char *str2)
{
int i;
for(i=0;i<10;i++)
{
  if(str1[i] == '\0' && str2[i] == '\0')
  {
   return 1;
   break;
  }
  else if (str1[i] != str2[i])
  {
   return 0; 
   break;
  }
  else
  {
   continue;
  }
}
}
void main()
{
struct num
{
  int nubers;
  char *name;
};
struct num sum[4]={{0,"鱼"},{0,"仓"},{0,"吴"},{0,"苏"}};
char str[10];
int n,i;
int a[3];
int comparison(char str1[],char *str2);
for (n=1;n<4;n++)
{
  printf("第%d位投票人:",n);
  scanf("%s",str);
  if(comparison(str,sum[0].name))
  {
   ++sum[0].nubers;
   
  }
  else if (comparison(str,sum[1].name))
  {
   ++sum[1].nubers;
  }
  else if (comparison(str,sum[2].name))
  {
   ++sum[2].nubers;
  }
  else if (comparison(str,sum[3].name))
  {
   ++sum[3].nubers;
  }
  else
  {
   continue;
  }
}
for (i=0;i<4;i++)
{
  a[i] = sum[i].nubers;
}
printf("%s的得票数是:%d\n",sum[0].name,a[0]);
printf("%s的得票数是:%d\n",sum[1].name,a[1]);
printf("%s的得票数是:%d\n",sum[2].name,a[2]);
printf("%s的得票数是:%d\n",sum[3].name,a[3]);

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



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

{

int i;

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

{

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

  {

   return 1;

   break;

  }

  else if (str1 != str2)

  {

   return 0; 

   break;

  }

  else

  {

   continue;

  }

}

}

void main()

{

struct num

{

  int nubers;

  char *name;

};

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

char str[10];

int n,i;

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

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

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

{

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

  scanf("%s",str);

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

  {

   ++sum[0].nubers;

   

  }

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

  {

   ++sum[1].nubers;

  }

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

  {

   ++sum[2].nubers;

  }

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

  {

   ++sum[3].nubers;

  }

  else

  {

   continue;

  }

}

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

{

  a = sum.nubers;

}

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

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

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

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



}
高地址 | 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-11-14 12:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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