使用数组来计票

时间:2015-03-26 19:36:03

标签: c arrays sum

所以,我正在制作这个程序,我需要使用数组,记录用户的投票总数,其中他们将投票选择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;
    }

1 个答案:

答案 0 :(得分:2)

首先,请将以下内容作为建议并花费所需时间进行操作,以后会奖励您

  • 格式化代码,使其看起来很漂亮

信不信由你,这可以让你成为更好的程序员。

  1. 循环中导致问题

    scanf("%c\n", &ch);
    

    因为您在按Enter键时输入'\n',然后scanf()将在您输入数据的迭代后立即使用它,您需要明确忽略空白字符"%c"说明符,如下所示

    scanf(" %c\n", &ch);
    
  2. 这个比较'D'== sum[3];绝对没有任何意义,我想你试图分配给角色常量并发现这是一个变通方法,这意味着你不明白{{1 }}运算符用于比较。

  3. 这也是错误的

    ==

    因为您传递了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等等。