首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

菜鸟有有关问题 请大神指教!

2012-09-06 
初学者有问题 请大神指教!!!!!#includestdio.h#includestring.hstruct student{char name[20]int cou

初学者有问题 请大神指教!!!!!
#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);
这里输入的回车符 或者 换行符 被留在了输入缓冲区中,解决方法如下:

C/C++ code
#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);    }} 

热点排行