所以,我正在制作这个程序,我需要使用数组,记录用户的投票总数,其中他们将投票选择a,b,c或d。最后,我将以最高票数打印总和并宣布他们为胜利者。话虽如此,但据了解,没有人可以投票超过一次。这就是我的问题发生的地方,我试图设置id的数组(voter_id)让区域中的每个值都为false,直到用户指定他的id然后投票,其中值应该是然后是0,在数组中的id位置。
另外我的程序没有打印printf以成功投票给候选人。 printf("成功投票给%c)
#include <stdio.h>
int main(){
int id;
int a_size;
char ch;
int sum[4];
int i;
int max;
int voter_id[a_size];
sum[0]=0;
sum[1]=0;
sum[2]=0;
sum[3]=0;
voter_id[a_size]=1;
//scan for the array size
scanf("%d", &a_size);
//need to loop and scan for characters while incrementing up the array size until we reach the final array slot
while(id>0 && id!=-1){
printf("What is your id?\n");
scanf("%d", &id);
for (i=0;i<a_size;i++){
voter_id[a_size]=1;
printf("You have already voted. You cannot vote again.");
continue;
}
printf("Welcome %d, which vote would you like to place?\n", id);
scanf("%c\n", &ch);
if (ch== 'A' || ch=='a'){
printf("You have successfully voted for A\n");
sum[0]++;
}
if (ch== 'B' || ch=='b'){
printf("You have successfully voted for B\n");
sum[1]++;
}
if (ch== 'C' || ch=='c'){
printf("You have successfully voted for C\n");
sum[2]++;
}
if (ch== 'D' || ch== 'd'){
printf("You have successfully voted for D\n");
sum[3]++;
}
}
max=1;
for(i=0;i<4;i++){
if (sum[i]>max){
max=sum[i];
}
'A'== sum[0];
'B'== sum[1];
'C'== sum[2];
'D'== sum[3];
printf("%c wins with %d votes", &sum[i], &max);
}
return 0;
}
答案 0 :(得分:2)
首先,请将以下内容作为建议并花费所需时间进行操作,以后会奖励您
信不信由你,这可以让你成为更好的程序员。
循环中导致问题
scanf("%c\n", &ch);
因为您在按Enter键时输入'\n'
,然后scanf()
将在您输入数据的迭代后立即使用它,您需要明确忽略空白字符"%c"
说明符,如下所示
scanf(" %c\n", &ch);
这个比较'D'== sum[3];
绝对没有任何意义,我想你试图分配给角色常量并发现这是一个变通方法,这意味着你不明白{{1 }}运算符用于比较。
这也是错误的
==
因为您传递了printf("%c wins with %d votes", &sum[i], &max);
数组中i
元素的地址,然后传递了sum
的地址,这也是错误的。
这意味着您不知道在max
中使用&
运算符地址的原因,您需要传递变量的地址以在scanf()
内修改它但是在scanf()
的情况下,你需要传递的是值。
如果你想查看谁赢了,那么
printf()
在这种特殊情况下,这将有效,因为int index;
max = sum[0];
index = 0;
for (i = 1 ; i < 4 ; ++i)
{
if (max < sum[i])
{
index = i;
max = sum[i];
}
}
printf("%c wins with %d votes", index + 'A', max);
和'B' == 'A' + 1
等等。