一直段错误,调试了好久,原来是用单个字符变量接收了字符串导致的,改成字符数组就OK了,题目不难,逻辑很简单:

#include<stdio.h>
#include<string.h>
int main(){
    int n,m;  //n候选人数, m投票总数
    int record[101]={0}; //某候选人对应的得票数
    char vote[20];  //投票字符串
    char name[101][20]={'\0'};  //候选人名字字符串
    while(~scanf("%d",&n)){
        int invalid_vote=0;  //无效票数
        for(int i=0;i<n;i++)
            scanf("%s",&name[i]);
        scanf("%d",&m);
        for(int i=0;i<m;i++){
            scanf("%s",&vote);
            int j,mark=0;
            for(j=0;j<n;j++){
               // 注意strcmp(str1,str2)字符串比较函数 若两串相等返回的是0
                if(!strcmp(name[j],vote)){
                    mark=1;
                    record[j]++;
                    break;
                }                   
            }
            if(mark==0)
                invalid_vote++;
        }
        for(int i=0;i<n;i++){
            printf("%s : %d\n",name[i],record[i]);
        }
        printf("Invalid : %d\n",invalid_vote);
    }
}