【问题标题】:My char array in my c++ program will not print anything我的 c++ 程序中的 char 数组不会打印任何内容
【发布时间】:2018-03-21 16:26:57
【问题描述】:

我正在为我的班级编写我的第一个 C++ 程序。我对这个程序真的很陌生,所以我有很多东西要学。在我的程序中,我想用 Undergrad/grad/gradassist 派生类创建一个 Student 类。 name 和 SSN 字段必须在一个 char 数组中(我知道字符串更有意义,但老师需要一个 char 数组)。该程序大部分工作正常,只是它不在我的 char 数组中打印任何内容。请帮忙!

#include <iostream>;
using namespace std;
class Student {
  protected:
    char name[21];
    char ssn[10];
    float gpa;
    int credits;

  public: 
     Student::Student() {};

     Student(const char n[], const char ss[], float& gp, int& cred) {
      name[21] = n[21];
      ssn[10] = ss[10];
      gpa = gp;
      credits = cred;


  }

    virtual void print() {
     cout << "Name: " << name << endl;
     cout << "SSN: " << ssn << endl;
     cout << "GPA: " << gpa << endl;
     cout << "Credits: " << credits << endl;
 }
    virtual float tuition() const = 0;


 };
class undergrad : public Student {
  protected:
    float undergrad_rate;
    char* year;
  public:
   undergrad::undergrad() {}

   undergrad(float ugr, char* yr, const char n[], const char ss[], float& 
   gp, int& cred) :
   Student(n, ss, gp, cred), undergrad_rate(ugr), year(yr){}

   void set_year(char* yr) {
    year = yr;
                            }
   char* getYear() {
    return year;
      }
   float getRate() {
    return undergrad_rate;
      }
    void print() {
    Student::print();
    cout << "Undergrad rate: " << undergrad_rate << endl;
    cout << "year: " << year << endl;


       }

   float tuition() { 
   //cout << "The tuition is $35000" << endl;
   return 35000;
    }

  };
 class grad : public Student {
  protected:
   float grad_rate;
   char* thesis;

  public:

 };

  int main(){

    char* jr = "Junior";
    char* sr1 = "Senior";
    char* fr = "Freshman";
    char* sr = "Sophmore";

    undergrad g(380, jr, "M", "000111222", 4.0, 12);
    g.print();


    system("pause");
    return 0;

 }

【问题讨论】:

  • name[21] = n[21] -> strcpy(name, n)
  • name[21] = n[21]; 这并不像你想象的那样,访问这两个数组之外。也请使用 std::string 代替 char[]。
  • 我知道字符串更有意义,但老师需要一个 char 数组 -- 在你学习的时候找另一位老师C 加入一些 C++ 语法,不是 C++。
  • 具有Undergrad/grad/gradassist基类的学生班。你是说派生类吗?
  • 是的,我修正了错误

标签: c++ arrays printing char


【解决方案1】:

问题出在你初始化成员namessn的方式上:

 Student(const char n[], const char ss[], float& gp, int& cred) {
      name[21] = n[21];
      ssn[10] = ss[10];

这里的问题不止一件事

  1. namessn 分别是大小为 21 和大小为 10 的字符数组。这意味着有效索引的范围分别为 0 到 20 和 0 到 9。因此,通过访问 name[21]ssn[10],您正在访问超出分配内存末尾的元素。
  2. 即使索引有效,您也只需通过这种方式分配一个字符。

为了按照您想要的方式初始化这些成员变量,请执行以下操作:

 Student(const char n[], const char ss[], float& gp, int& cred) {
      strcpy_s(name, sizeof(name), n);
      strcpy_s(ssn, sizeof(ssn), ss);

这会将构成输入字符串的所有字符复制到您的成员变量中,您将获得所需的输出。

【讨论】:

  • 谢谢!!你救了我们的命!
猜你喜欢
  • 2011-02-06
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
相关资源
最近更新 更多