scanf("%s",字符串)和gets(字符串)的区别??内附程序断
scanf("%s",字符串)和gets(字符串)有区别吗?我认为是没有的,可是我写了下面的程序才发现不对头
程序的目的是为了给N个首选人选票,最后打印出每个候选人名字下有几票,共M个投票人
程序段1:
#include<stdio.h>
#include<string.h>
#define N 3 /*3个候选人*/
#define M 10 /*10个投票者*/
struct person
{
char name[10];
int count;
};
main()
{
struct person ps[N];
int i,j;
char vote_name[10];
/*初始化候选人*/
printf("请输入候选人名单,每输入一人回车结束:\n");
for(i=0 ; i<N ; i++)
scanf("%s",ps[i].name);
for(i=0 ; i<N ; i++)
ps[i].count=0;
/*唱票*/
printf("请输入您要投票的名字:\n");
for(i=0 ; i<M ; i++)
{
gets(vote_name); /*这句是关键,用scanf("%s",vote_name);取代会有不同效果*/
for(j=0 ; j<N ; j++)
if( strcmp(ps[j].name,vote_name)==0 )
ps[j].count++;
}
/*输出结果*/
for(i=0 ; i<N ; i++)
printf("%s:%d\n",ps[i].name,ps[i].count);
}
这个程序只输入9个投票人,就输出结果了,但是
gets(vote_name); /*这句是关键,用scanf("%s",vote_name);取代会有不同效果*/
换掉后
程序段2:
#include<stdio.h>
#include<string.h>
#define N 3 /*3个候选人*/
#define M 10 /*10个投票者*/
struct person
{
char name[10];
int count;
};
main()
{
struct person ps[N];
int i,j;
char vote_name[10];
/*初始化候选人*/
printf("请输入候选人名单,每输入一人回车结束:\n");
for(i=0 ; i<N ; i++)
scanf("%s",ps[i].name);
for(i=0 ; i<N ; i++)
ps[i].count=0;
/*唱票*/
printf("请输入您要投票的名字:\n");
for(i=0 ; i<M ; i++)
{
scanf("%s",vote_name); /*这句是关键,用gets(vote_name); 取代会有不同效果*/
for(j=0 ; j<N ; j++)
if( strcmp(ps[j].name,vote_name)==0 )
ps[j].count++;
}
/*输出结果*/
for(i=0 ; i<N ; i++)
printf("%s:%d\n",ps[i].name,ps[i].count);
}
则没问题,输入10人投票后才输入结果
请人解释一下原因,谢谢大大们