请大家帮帮忙看看哪错了

fd_skf 2006-11-30 12:01:02
int main()
{
struct stu *a;
int n,i,j=0;
printf("请输入学生人数:");
scanf("%d",&n);
a=(stu *)malloc(n*sizeof(stu));
for(i=0;i<n;i++)
{
gets(a[i].name);
scanf("%lf",&a[i].score);
}
/*for(i=n;i>1;i--)
for(j=0;j<i-1;j++)
if(a[j].score>a[j+1].score)
swap(a[j],a[j+1]);
for(i=0;i<n;i++)
printf("%s %lf\n",a[i].name,a[i].score);*/
return 0;
}
为什么我在对stu a[i]进行输入的时候,比如我输入的n为2,但却只能输入一组a[i],输入n为4的时候,只能输入2组,为什么不是n组呢?请高手帮忙指导一下,谢谢了!
...全文
295 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fd_skf 2006-11-30
  • 打赏
  • 举报
回复
有点明白了,谢谢大家了
KUCHIBUE 2006-11-30
  • 打赏
  • 举报
回复
gets()呢....
shawnwan 2006-11-30
  • 打赏
  • 举报
回复
一般请不要将scanf()与gets()一起使用。
在scanf格式输入中,回车键‘\n’并不表示完全等于换行符, 而是读取并放弃后面所有的空白字符;
当执行下面的gets(a[i].name);语句时,gets()会自动读取了这段空白字符串并保存在a[0].name中。
andyhuang_one 2006-11-30
  • 打赏
  • 举报
回复
这样更清楚可以看出。

struct stu
{
char name[20];
float score;
};

int main()
{
struct stu *a;
int n,i=0,j=0,k;
printf("请输入学生人数:");
scanf("%d",&n);
a=malloc(n*sizeof(struct stu));
for(i=0;i<n;i++)
{
printf("\n请输入第%d学生姓名:",i+1);
gets(a[i].name);
printf("\n请输入第%d学生成绩:",i+1);
//当输入完成绩后,继续按几下空格键,在下面的输出语句中在会将a[i].name的‘空格’输出来。
scanf("%f",&a[i].score);
}
for(i=0;i<n;i++)
printf("a[%d]=%s a[%d]=%f\n",i,a[i].name,i,a[i].score );
return 0;
}
andyhuang_one 2006-11-30
  • 打赏
  • 举报
回复
一般请不要将scanf()与gets()一起使用。
在scanf格式输入中,回车键‘\n’并不表示完全等于换行符, 而是读取并放弃后面所有的空白字符;
当执行下面的gets(a[i].name);语句时,gets()会自动读取了这段空白字符串并保存在a[0].name中。
LZ可以用以下一段程序验证一下,以作体会。

最后可以将gets(a[i].name);改为scanf("%s",a[i].name);完成你所需的操作。


struct stu
{
char name[20];
float score;
};

int main()
{
struct stu *a;
int n,i,j=0,k;
printf("请输入学生人数:");
scanf("%d",&n);
a=malloc(n*sizeof(struct stu));
for(i=0;i<n;i++)
{
printf("\n请输入第%d学生姓名:",i+1);
gets(a[i].name);
//scanf("%s",a[i].name);
}
for(i=0;i<n;i++)
printf("a[%d]=%s\n",i,a[i].name);
return 0;
}
stou 2006-11-30
  • 打赏
  • 举报
回复
我也正好遇到这样问题。学习。
freezing_118 2006-11-30
  • 打赏
  • 举报
回复
gets()会把前一个输入的回车读入。
比如对a[0]输入时,它的name已经有内容了,就是学生人数后的那个回车,结果后来输入的name到了score里,而name后的回车到了a[1]的name里,score到了a[1]的score里。这样刚好少一半。
fd_skf 2006-11-30
  • 打赏
  • 举报
回复
用gets()有什么错吗?

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧