初学者有问题 请大神指教!!!!!
#include<stdio.h>
#include<string.h>
struct student
{
char name[20];
int count;
}leader[3]={"xiaozhang",0,"xiaoli",0,"xiaowang",0};
void main()
{
int n,i,j;
char a[20];
printf("请输入参加选举的人数!\n");
scanf("%d",&n);
printf("请输入您想选的候选人姓名!\n");
for(i=0;i<n;i++)//标记
{
gets(a);//此处用gets()来读姓名字符串,带标记的循环循环少执行一次,用scanf()就没问题
for(j=0;j<3;j++)
if(strcmp(a,leader[j].name)==0)
leader[j].count++;
}
for(j=0;j<3;j++)
{
printf("%s的票数为:%d\n",leader[j].name,leader[j].count);
}
}
[解决办法]
缓冲区没清空
解决很简单,在用gets之前清空缓冲区就行了,在gets之前加上
int c;
while((c = getchar()) != '\n' && c != EOF);
[解决办法]
同意楼上的 不过清空缓冲区有比较好的方法
scanf("%*[^\n],%*c");
[解决办法]
缓冲区问题。
如下:
printf("请输入参加选举的人数!\n");
scanf("%d",&n);
这里输入的回车符 或者 换行符 被留在了输入缓冲区中,解决方法如下:
#include<stdio.h>#include<string.h>struct student{char name[20];int count;}leader[3]={"xiaozhang",0,"xiaoli",0,"xiaowang",0};void main(){ int n,i,j; char a[20]; printf("请输入参加选举的人数!\n"); scanf("%d", &n); printf("请输入您想选的候选人姓名!\n"); getchar(); for(i=0;i<n;i++)//标记 { gets(a); for(j=0;j<3;j++) if(strcmp(a,leader[j].name)==0) leader[j].count++; } for(j=0;j<3;j++) { printf("%s的票数为:%d\n",leader[j].name,leader[j].count); }}