标题:一个C++的小实验,遇到了一点问题,希望有人能帮帮忙
只看楼主
yfnick
Rank: 2
等 级:论坛游民
帖 子:9
专家分:20
注 册:2009-10-15
结帖率:100%
已结贴  问题点数:20 回复次数:9 
一个C++的小实验,遇到了一点问题,希望有人能帮帮忙
实验要求是输入五个学生的学号,姓名,语文成绩,数学成绩,英语成绩. 程序算出各个学生的总成绩和平均成绩,要求按成绩的高低输出所有学生的信息
(我没把排序功能包含进去,不知道该怎么排) 红色字体部分就是我觉得出问题的地方,但是我不知道怎么解决.就是有关成员数组初始化的
//这是头文件student.h
# if ! defined _STUDENT_H_
# define _STUDENT_H_
#include <iostream.h>
#include <string.h>
class Student
{
public:
    Student(char *id,char *name,double ch,double math,double eng);
    ~Student();
    void Show();
private:
    char *StuNum;
    char *StuName;
    double ScoreOfCh;
    double ScoreOfMath;
    double ScoreOfEng;
    double ScoreOfTotal;
    double ScoreOfAver;

};

# endif

//student.cpp
#include <string.h>
#include "student.h"
Student::Student(char *id,char *name,double ch,double math,double eng)
{
    StuNum = new char[strlen(id) + 1];
    strcmp(StuNum,id);
    StuName = new char[strlen(name) + 1];
    strcmp(StuName,name);
    ScoreOfCh = ch;
    ScoreOfMath = math;
    ScoreOfEng = eng;
    ScoreOfTotal = ch + math + eng;
    ScoreOfAver = ScoreOfTotal / 3;
};
Student::~Student()
{
    delete []StuNum;
    delete []StuName;
};
void Student::Show()
{
    cout<<StuNum<<'\t'<<StuName<<'\t'<<ScoreOfCh<<'\t'<<ScoreOfMath<<'\t'<<ScoreOfEng<<'\t'<<ScoreOfTotal<<'\t'<<ScoreOfAver<<endl;
};

// yfnick.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "student.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
    cout<<"程序功能:记录五个学生的成绩,输出成绩\n";
    Student *a[5];
    for(int i = 0;i < 5;i ++)
    {
        char *id=NULL;
        char *name=NULL;
        double ch,math,eng;
        cin>>id>>name>>ch>>math>>eng;
        Student *b = new Student(id,name,ch,math,eng);
        a[i] = b;
        if (a[i] == NULL)
        {
            cout<<"申请内存失败"<<endl;
            return 0;
        }
    }
    cout<<"学生成绩如下"<<endl;
    cout<<"学号 姓名 语文成绩 数学成绩 英语成绩 总成绩 平均成绩"<<endl;
    a[0]->Show();
    a[1]->Show();
    a[2]->Show();
    a[3]->Show();
    a[4]->Show();
    delete[] a;
    return 0;
}
请大家多多指教!


 
搜索更多相关主题的帖子: 实验 
2010-04-18 16:36
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
得分:2 
#include "stdafx.h"   这个应该不要吧

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-04-18 18:45
yyblackyy
Rank: 6Rank: 6
等 级:侠之大者
帖 子:98
专家分:457
注 册:2010-3-31
得分:15 
strcmp(StuNum,id);       改        strcpy(StuNum,id)
    StuName = new char[strlen(name) + 1];
    strcmp(StuName,name);     改        strcpy(StuName,name);

Student::~Student()
{
    delete []StuNum;         改 delete StuNum;
    delete []StuName;        改 delete SuuName;
};


char *id=NULL;          改 char id[20];
        char *name=NULL;         改 name[20];
2010-04-18 19:03
yfnick
Rank: 2
等 级:论坛游民
帖 子:9
专家分:20
注 册:2009-10-15
得分:0 
回复 3楼 yyblackyy
有几点提得比较好,但是还存在问题,编译和链接没问题,运行后就出问题了
输进去的值根本就没传进去,可能是成员数组存在问题
2010-04-19 08:14
yyblackyy
Rank: 6Rank: 6
等 级:侠之大者
帖 子:98
专家分:457
注 册:2010-3-31
得分:3 

这是上次遗忘的
delete[] a; 改 for(int j=0;j<5;j++){ delete a[j];a[j]=0;}
楼主是否改了   strcmp(StuNum,id);       改        strcpy(StuNum,id)
    StuName = new char[strlen(name) + 1];
    strcmp(StuName,name);     改        strcpy(StuName,name);
  改了的话就能输入了  
2010-04-19 20:47
yfnick
Rank: 2
等 级:论坛游民
帖 子:9
专家分:20
注 册:2009-10-15
得分:0 
其实还是存在问题,我还是没彻底通过
2010-04-22 22:02
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
得分:0 
我改了一下,你试试看。//student.h
// student.h: interface for the student class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_STUDENT_H__D2B3CE4F_6109_48FA_AEDC_F7961F3511F7__INCLUDED_)
#define AFX_STUDENT_H__D2B3CE4F_6109_48FA_AEDC_F7961F3511F7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <iostream.h>
#include <string.h>
class Student
{
public:
    Student(char *id,char *name,double ch,double math,double eng);
    ~Student();
    void Show();
private:
    char* StuNum;  
    char* StuName;
    double ScoreOfCh;
    double ScoreOfMath;
    double ScoreOfEng;
    double ScoreOfTotal;
    double ScoreOfAver;

};


#endif // !defined(AFX_STUDENT_H__D2B3CE4F_6109_48FA_AEDC_F7961F3511F7__INCLUDED_)


//student.cpp

// student.cpp: implementation of the student class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <string.h>
#include "student.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


Student::Student(char *id,char *name,double ch,double math,double eng)
{
    StuNum = (char*)new char[strlen(id) + 1]; //这里要强制类型转换
    strcpy(StuNum,id);    //仔细看看,这里错了,要把strcmp改成strcpy
    StuName = (char*)new char[strlen(name) + 1]; //这里要强制类型转换
    strcpy(StuName,name);     //仔细看看,这里错了,要把strcmp改成strcpy
    ScoreOfCh = ch;
    ScoreOfMath = math;
    ScoreOfEng = eng;
    ScoreOfTotal = ch + math + eng;
    ScoreOfAver = ScoreOfTotal / 3.0; //把3改成3.0比较好
}

Student::~Student()
{
    delete []StuNum;
    delete []StuName;
}

void Student::Show()
{
    cout<<StuNum<<'\t'<<StuName<<'\t'<<ScoreOfCh<<'\t'<<ScoreOfMath<<'\t'
        <<ScoreOfEng<<'\t'<<ScoreOfTotal<<'\t'<<ScoreOfAver<<endl;
}
//main.cpp

// 调试1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "student.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
    cout<<"程序功能:记录五个学生的成绩,输出成绩\n";
    Student *a[5];
    for(int i=0;i<5;i++)
    {
        //char *id=NULL; //先把指针置空,这是个好习惯。但是这里很可能就是造成错误的原因。
        //char *name=NULL;
        cout<<"请输入学生的信息:"<<endl;
        char id[20],name[20];
        double ch,math,eng;
        cin>>id>>name>>ch>>math>>eng;
        Student *b = (Student*)new Student(id,name,ch,math,eng);
        a[i] = b;  
        if (a[i] == NULL)
        {
            cout<<"申请内存失败"<<endl;
            return 0;
        }
    }
    cout<<"学生成绩如下"<<endl;
    cout<<"学号 姓名 语文成绩 数学成绩 英语成绩 总成绩 平均成绩"<<endl;
    a[0]->Show();
    a[1]->Show();
    a[2]->Show();
    a[3]->Show();
    a[4]->Show();
    delete[] a;
    return 0;
}



[ 本帖最后由 南国利剑 于 2010-4-22 23:15 编辑 ]

南国利剑
2010-04-22 23:12
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
得分:0 
我试过了,能够正确的输入输出。
但是运行之后会出现运行错误。

我认为这很有可能是楼主,在这段代码中所用的指针,没有处理好,所导致的。
有可能是一个指针重复释放所致,也有可能是浅拷贝造成的。

我认为还是用数组比较好。

请多多指教!

南国利剑
2010-04-22 23:20
dht1211
Rank: 2
等 级:论坛游民
帖 子:9
专家分:35
注 册:2010-3-23
得分:0 
2010-04-25 18:39
zhug
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2010-4-3
得分:0 
以下是引用南国利剑在2010-4-22 23:20:26的发言:

我试过了,能够正确的输入输出。
但是运行之后会出现运行错误。

我认为这很有可能是楼主,在这段代码中所用的指针,没有处理好,所导致的。
有可能是一个指针重复释放所致,也有可能是浅拷贝造成的。

我认为还是用数组比较好。

请多多指教!
指针乱使用会导致内存溢出等一系列问题。
2010-04-26 17:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-303495-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032062 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved