C 试图将字符串扫描到数组中时程序崩溃
我正在写一个程序来记录5个人的姓氏和投票。它将显示输入的人的姓名、相应的选票以及获胜者 我需要将人名放入一个字符串数组中。这就是程序崩溃的地方。不确定我是否可以修改它使其工作,或者我是否需要重做它 malloc函数似乎是这类问题的重复修复程序C 试图将字符串扫描到数组中时程序崩溃,c,C,我正在写一个程序来记录5个人的姓氏和投票。它将显示输入的人的姓名、相应的选票以及获胜者 我需要将人名放入一个字符串数组中。这就是程序崩溃的地方。不确定我是否可以修改它使其工作,或者我是否需要重做它 malloc函数似乎是这类问题的重复修复程序 #include <stdio.h> #include <string.h> #include <stdlib.h> int TotalVotes(int voteArray[],int size) { int
#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]);
}
#包括
#包括
#包括
整数总投票数(整数voteArray[],整数大小)
{
整数和=0;
对于(int i=0;ivoteArray[max])
max=1;
如果(voteArray[2]>voteArray[max])
max=2;
如果(voteArray[3]>voteArray[max])
最大值=3;
如果(voteArray[4]>voteArray[max])
最大值=4;
返回最大值;
}
void main()
{
字符名称数组[5];
int voteArray[5],总冠军;
对于(int i=0;ichar nameArray[5];
is应该类似于char nameArray[5][20];
是的,在C中,字符串由字符数组(char*或char[])表示
此外,出于两个原因,您应该使用FGET而不是带有字符串的scanf:
Fgets有助于防止缓冲区溢出,因为它预先知道字符串的大小
FGET将始终运行,因为它不像scanf那样在输入缓冲区中保留字符
fgets的原型看起来有点像这样(您可以使用stdin作为文件指针从键盘读入,但要知道fgets保留新行):
此外,如果您使用scanf,您应该对无效输入执行更多的错误检查。字符名称数组
不是字符串数组。它是一个5个字符的数组。因此,您的scanf函数试图将字符串放置在这样的数组中会崩溃。请尝试改用双指针。是的,它可以100%工作……我不确定原因是什么?我知道是一个多维数组。
fgets( char *output_variable, unsigned int string_length, FILE *input_file );