C 试图将字符串扫描到数组中时程序崩溃

C 试图将字符串扫描到数组中时程序崩溃,c,C,我正在写一个程序来记录5个人的姓氏和投票。它将显示输入的人的姓名、相应的选票以及获胜者 我需要将人名放入一个字符串数组中。这就是程序崩溃的地方。不确定我是否可以修改它使其工作,或者我是否需要重做它 malloc函数似乎是这类问题的重复修复程序 #include <stdio.h> #include <string.h> #include <stdlib.h> int TotalVotes(int voteArray[],int size) { int

我正在写一个程序来记录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]);
}
#包括
#包括
#包括
整数总投票数(整数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;i
char 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 );