我正在编写一个程序来准确地输入5个姓氏和他们的选票。这将显示所输入人员的姓名,相应的投票以及获胜者。
我需要将人的名字变成一个字符串数组。这是程序崩溃的地方。不确定我是否可以修改它以使其工作或者我是否需要重做它。
malloc函数似乎是针对此类问题的重复修复?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int TotalVotes(int voteArray[],int size)
{
int Sum=0;
for (int i=0;i<size;i++)
{
Sum+=voteArray[i];
}
return Sum;
}
int Winner(int voteArray[],int size)
{
int max;
max=0;
if (voteArray[1]>voteArray[max])
max=1;
if (voteArray[2]>voteArray[max])
max=2;
if (voteArray[3]>voteArray[max])
max=3;
if (voteArray[4]>voteArray[max])
max=4;
return max;
}
void main()
{
char nameArray[5];
int voteArray[5],Total,winner;
for (int i=0;i<5;i++)
{
voteArray[i]=0;
}
for (int j=0;j<5;j++)
{
printf("Enter the name of the candidate number %d\n",j+1);
scanf("%s",nameArray[j]);
printf("Enter that persons number of votes\n");
scanf("%d",&voteArray[j]);
}
Total=TotalVotes(voteArray,5);
winner=Winner(voteArray,5);
printf("%s\t%s\t%s\n","Candidate","Votes Received","% of Total Votes");
for (int y=0;y<5;y++)
{
printf("%s\t%d\t%0.2f\n",nameArray[y],voteArray[y],(float)voteArray[y]/Total);
}
printf("The Winner of The Election is %s\n",nameArray[winner]);
}
答案 0 :(得分:0)
char nameArray[5];
应该像char nameArray[5][20];
答案 1 :(得分:0)
是的,在C中,字符串由字符数组(char *或char [])表示。
此外,您应该使用字符串来获取fgets而不是scanf,原因有两个:
fgets的原型看起来有点像这样(您可以使用stdin将FILE指针从键盘读入,但要意识到fgets保持换行符):
fgets( char *output_variable, unsigned int string_length, FILE *input_file );
此外,如果您使用scanf,则应该对无效输入进行更多错误检查。