一个对你不是问题的问题(关于输入的)!谢谢.

LongxiaoZeng2001 2003-09-11 12:35:04
最近做一道题,遇到这样一个问题:
struct student{
char *name;//学生名字
int _number;//学生学号
float score;//学生成绩
}//一个关于学生的结构
struct buf[20];//20个学生的名字学号和成绩
for(int i=o;i<20;i++)//在主函数中,用以分别给输入buf[20]
{
cout<<"输入第"<<i+1<<"个学生的名字,学号和成绩:";
cin>>buf[i].name>>buf[i]._number>>buf[i].score;
}
但是在运行时,主函数中得for循环只是做第一次(就是i=0)就不做了,然后报错.
这是怎么回事?
谢谢!
我用的是vc 5.0,Windows XP.

...全文
24 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwinfwin 2003-09-11
  • 打赏
  • 举报
回复
int i=o
如果我没有看错,你的是i=o,不是0,是字母o哦!
这个算你笔误,无关程序

关键是
char *name;//这是一个指针,你没有分配内存哦
cin>>buf[i].name//这个时候这个name指针是个野指针哦,你输的名字谁知道到那里去了啊,低级错误啊。不缓冲区溢出,内存访问越界,等未知错误。请赋值后再使用指针先。
ilbj 2003-09-11
  • 打赏
  • 举报
回复
for(int i=o;i<20;i++)
---应该是0
rtdb 2003-09-11
  • 打赏
  • 举报
回复
char *name没开空间, float score乃至整个结构最好初始化为0
halibut 2003-09-11
  • 打赏
  • 举报
回复
你的结构中的name元素是一个指针,而不是一个数组,所以开始时指向的是非法的内存区域,你必须为它分配一个内存块!
1.
struct student{
char name[20];//学生名字 //这里定义成数组,就可以了
int _number;//学生学号
float score;//学生成绩
}//一个关于学生的结构
struct buf[20];//20个学生的名字学号和成绩
for(int i=o;i<20;i++)//在主函数中,用以分别给输入buf[20]
{
cout<<"输入第"<<i+1<<"个学生的名字,学号和成绩:";
cin>>buf[i].name>>buf[i]._number>>buf[i].score;
}



2.
struct student{
char *name;//学生名字
int _number;//学生学号
float score;//学生成绩
}//一个关于学生的结构
struct buf[20];//20个学生的名字学号和成绩
for(int i=o;i<20;i++)//在主函数中,用以分别给输入buf[20]
{
cout<<"输入第"<<i+1<<"个学生的名字,学号和成绩:";
buf[i].name = (char *)malloc(20); //这样也行,但是当你的程
//序结束时别忘记删除分配的内存
cin>>buf[i].name>>buf[i]._number>>buf[i].score;
}
//使用完后释放内存
for(int i=0;i<20;i++)
{
free(buf[i].name);
buf[i].name = NULL;
}
stephenZL 2003-09-11
  • 打赏
  • 举报
回复
name用一个数组不是很好吗??指针定义后可是要赋值的哦!!

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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