尝试将字符串扫描到数组时程序崩溃

时间:2014-11-11 03:51:34

标签: c

我正在编写一个程序来准确地输入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]);
}

2 个答案:

答案 0 :(得分:0)

char nameArray[5];应该像char nameArray[5][20];

答案 1 :(得分:0)

是的,在C中,字符串由字符数组(char *或char [])表示。

此外,您应该使用字符串来获取fgets而不是scanf,原因有两个:

  1. Fgets有助于防止缓冲区溢出,因为它事先知道字符串的大小。
  2. Fgets将始终运行,因为它不会像scanf那样在输入缓冲区中留下字符。
  3. fgets的原型看起来有点像这样(您可以使用stdin将FILE指针从键盘读入,但要意识到fgets保持换行符):

    fgets( char *output_variable, unsigned int string_length, FILE *input_file );
    

    此外,如果您使用scanf,则应该对无效输入进行更多错误检查。