新手问题 求改正

Seffrui_M 2012-11-30 03:01:28
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
#define LEN sizeof(struct student)
struct student
{
char name[20];
long number;
char sex;
int score[3];
}stu[100];
int input(struct student *p)
{
int i;
p->name[0]='a';
printf("请输入学生姓名 学号 性别 分数 以#结束\n");
for(i=0;i<SIZE;i++)
{
scanf("%s%ld%c%d%d%d",(p+i)->name,&(p+i)->number,&(p+i)->sex,&(p+i)->score[0],&(p+i)->score[1],&(p+i)->score[2]);
if(((p+i)->name[0])=='#')
break;
}
printf("n=%d\n\n",i-1);
return i-1;
}
void output(struct student *p,int n)
{
int i=0;
for(;i<n;i++)
printf("%-10s%-12ld %c%5d%5d%5d\n",(p+i)->name,(p+i)->number,(p+i)->sex,(p+i)->score[0],(p+i)->score[1],(p+i)->score[2]);
}
int main()
{
int n;
struct student *p;
p=stu;
n=input(p);
output(p,n);
return 0;
}

运行后如图 求问题原因啊 求改正 为什么我连着打了两个#才可以结束 而且输出的分数是0?
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
34栋610 2012-11-30
  • 打赏
  • 举报
回复
输入格式问题,你第一个输入#按下回车,程序还在等待输入,将回车当作了输入间隔。 当第二次输入#,判断输入完成,会检查name[0]会不会等于#,即使你第二次输入其它符号(%), 也能退出循环。 至于m为什么在名字显示,也是输入格式原因,你输入的空格输入进了性别, m与分数类型不同,判断第一次输入结束,m写入名字。 在scanf中加上间隔就可以了。还有其它方法可以读入一个#就可以退出循环,编译时多尝试! int input(struct student *p) { int i; p->name[0]='a'; printf("请输入学生姓名 学号 性别 分数 以#结束 \n"); for(i=0;i<SIZE;i++) { scanf("%s %ld %c %d %d %d",(p+i)->name,&(p+i)->number, &(p+i)->sex,&(p+i)->score[0],&(p+i)->score[1], &(p+i)->score[2]); if(((p+i)->name[0])=='#') break; } printf("n=%d\n\n",i); return i; }
Seffrui_M 2012-11-30
  • 打赏
  • 举报
回复
引用 楼主 Seffrui_M 的回复:
CSS code?? 12345678910111213141516171819202122232425262728293031323334353637383940 #include<stdio.h> #include<stdlib.h> #define SIZE 100#define LEN sizeof(struct student) struct student { ……
不懂... 求代码
newtee 2012-11-30
  • 打赏
  • 举报
回复
没分配内存空间 用malloc

33,311

社区成员

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

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