question!!!!

狂砍八条街 2009-04-25 08:56:10
朋友的一个程序,编译通过,输入各项数据后,为什么不执行s.set()函数。我知道怎么改,把cin>>Snum[4]以及cin>>Sname[9]改为cin>>Snum和cin>>Sname后就能正确运行了,哪位高人解释一下为什么要这样改?

#include<iostream.h>
#include<string.h>
/*
编写一个程序,已有若干个学生数据,这些数据包括学号,姓名,c,cpp,java三门课成绩,
求各门课程的平均分。要求设计不同的成员函数求各门课程的平均分。
*/
class Cstudent
{
private:
char num[4];
char name[9];
float a,b,c,equel;
public:
void set(char Snum[4],char Sname[9],float Sa,float Sb,float Sc);
void disp();
};

void Cstudent::set(char Snum[4],char Sname[9],float Sa,float Sb,float Sc)
{
strcpy(num,Snum);
strcpy(name,Sname);
a=Sa;
b=Sb;
c=Sc;
}

void Cstudent::disp()
{
cout<<"学号:"<<num<<"姓名:"<<name<<"C语言平均分:"<<a<<endl;
}

void main()
{
Cstudent s;
char Snum[4];
char Sname[9];
float a1,a2,a3;

cout<<"请输入学号:";
cin>>Snum[4];

cout<<"请输入姓名:";
cin>>Sname[9];

cout<<"请输入C语言成绩:";
cin>>a1;

cout<<"请输入C++成绩:";
cin>>a2;

cout<<"请输入Java成绩:";
cin>>a3;

s.set(Snum,Sname,a1,a2,a3);
s.disp();

}
...全文
72 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
另外,请用以下语句代替上面的语句。
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
//代码
return 0;
}
deltamaster 2009-04-25
  • 打赏
  • 举报
回复
cin >> 后面只允许写一个产生一个值的
表达式。
Snum[4]在这里表示Snum数组中下标为4的元素,但是Snum中有这样的元素吗?这是下标越界的行为,显然是错误的。
此外,C++的cin和cout对char*类型都有特别的处理方式。
cin >> Snum表示将读取到的字符数组存储到堆空间,然后将首字符的地址赋予Snum。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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