|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 绝尘の初 于 2013-4-20 22:13 编辑
一个投票的程序~--------------------------------------------------
#include<stdio.h>
#define FR for(i=1;i<=10;i++)
#define PRT(j,k) printf("j的票数为%d",k)
struct houxuanren
{
int num;
}; \\候选人结构体
int main()
{
void toupiao();
toupiao(); \\投票函数
getch();
}
void toupiao()
{
struct houxuanren a[4]={{0},{0},{0},{0}}; \\候选人结构体数组
int i; \\循环控制
char hxr;
void mx(struct houxuanren a[],int n); \\比较票数函数
printf("欢迎进入投票系统\n\n候选人名单有:a,b,c,d\n\n");
FR
{
printf("第%d票为:",i);
scanf("%s",&hxr);
\\问题就在这,这里用%s的话,只输入一个字符时,i就变成永远是1,也就是无限循环下去了,而输入二个字符以上时退出循环,什么原因?以及如果改成%c,则循环方面没有问题,但是第一次循环输入一个字符后,第二次循环就会自动将'\0'赋值给hxr,导致第二票自动作废 其它地方没有问题了,就是这里百思不得其解,原因是什么?
if(hxr=='a')
{
a[0].num++;
continue;
}
else if(hxr=='b')
{
a[1].num++;
continue;
}
else if(hxr=='c')
{
a[2].num++;
continue;
}
else if(hxr=='d')
{
a[3].num++;
continue;
}
else
{
printf("\n作废\n");
continue;
}
}
printf("a的票数为%d\n",a[0].num);
printf("b的票数为%d\n",a[1].num);
printf("c的票数为%d\n",a[2].num);
printf("d的票数为%d\n",a[3].num);
printf("成功入选的是:");
mx(a,4);
}
void mx(struct houxuanren a[],int n) \\比较票数
{
char max;
if(a[0].num>=a[1].num&&a[0].num>=a[2].num&&a[0].num>=a[3].num)
max='a';
else if(a[1].num>=a[0].num&&a[1].num>=a[2].num&&a[1].num>=a[3].num)
max='b';
else if(a[2].num>=a[0].num&&a[2].num>=a[1].num&&a[2].num>=a[3].num)
max='c';
else if(a[3].num>=a[0].num&&a[3].num>=a[1].num&&a[3].num>=a[2].num)
max='d';
printf("%c",max);
}
-------------------------------------------------------------------------------------------
还有
在宏定义里
#define PRT(j,k) printf("j的票数为%d",k)
这个j被认定为字符串的一部分,而不是参数
该怎么改?
------------------------------------------------------------------------------------------------------------------
调试了一下发现要把hxr定义为hxr[2]才行,问题已经解决了,但是不明白原因
想了下也就是hxr要把\0也接收到才行
那和循环又有什么关系呢?
|
|