比较简单的问题 自己找不出来
#include <stdio.h>#include <string.h>
#include <stdlib.h>
void main()
{
struct student
{
char name[10];
int vote;
}stu[20]; //定义参选人结构体,包括姓名和所得选票数
struct student t; //定义中间变量用作排序
int j,k,n,i; //定义一些中间变量以作为for循环用
char job[5]; //竞选职位
int pan; //最后的是否重来接收输入变量
char vote[200]; //以字符串定义了最多200张选票,
int system(const char *string); //用作最后重来时清空全部屏幕
label:
printf("输入竞选职务\n");
scanf("%s",&job); //接收职位信息
printf("请输入全部参选人名以数字1结束\n");
for(i=0;i<20;i++)
{
scanf("%s",&stu[i].name);
if(strcmp(stu[i].name,"1")==0) //接收参选人数信息
break;
}
for(k=0;k<i;k++)
{
stu[k].vote=0; //参选人初始票归零
}
printf("输入选票\n");
scanf("%s",&vote); //输入选票以字符串形式如:123124-1241-2
for(k=0;k<200;k++) //循环接收选票的每个字符
{
if(vote[k]=='-') //查看是否有'-'
{
k+=1;
vote[k]-='0'; //有'-'则读取下一个字符 并转换为数字 该人选票-1
stu[vote[k]-1].vote-=1;
}
else
{
vote[k]-='0';
stu[vote[k]-1].vote+=1; //若为正常投票则被选人的票数+1
}
}
for(k=0;k<i;k++) //冒泡排序法 进行排序
{
for(j=0;j<i;j++)
{
if(stu[j].vote<stu[j+1].vote)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}
printf("获选%s的是%s 票数=%d\n",job,stu[0].name,stu[0].vote); //输出被选人信息
j=0;
for(k=0;k<i;k++)
{
printf("%s的票数是%d\n",stu[k].name,stu[k].vote); //输出所有参选人信息
j+=stu[k].vote;
}
printf("总票数是%d\n",j); //统计总票数与实际是否相符
printf("重来请按1?\n"); //判断是否重新开始
scanf("%d",&pan);
if(pan==1)
{
system("cls");
goto label;
}
else
{
exit(0); //退出程序
}
}
那个输入选票的时候输入 111-1-122等可以正常运行,但是一到有三个减票的时候 就不行了 出错 比如 1111-1-1-1223
求高手解答。。
[ 本帖最后由 xiaoseqingch 于 2012-10-15 18:42 编辑 ]