打印不同的字符串以读取不同的对象变量

时间:2016-03-12 08:03:51

标签: c++ class

我希望输出不同的字符串来读取变量。例如,下面,我希望在使用 eng.setmarks()阅读英文商标之前打印输入英文商标。请建议一种方法来实现这一点。

这是我的代码:(查看下面的 for 循环)

#include <iostream>
#include <cstring>

using std::cin;
using std::cout;

class student {
    char name[20];
    int age;

    class marks {
        int marks;
        public:
            void setmarks( int x) {
                marks = x;
            }
            int getmarks() {
                return marks;
            }
    };

    public:
        marks eng, math, phy, chem, cs; // nested objects are public

        void setname( char* n) {
            strncpy( name, n, 20);
        }
        char* getname() {
            return name;
        }
        void setage( int a) {
            age = a;
        }
        float total() {
            size_t total = eng.getmarks() + math.getmarks() +
            phy.getmarks() + chem.getmarks() + cs.getmarks();

            return total/500.0;
        }
};

int main() {a
    student new_stud;


    char temp[20];

    cout << "Enter name:  ";
    cin >> temp;
    cin.get( temp, sizeof(temp));
    new_stud.setname(temp);

    int age;

    cout << "Enter age:  ";
    cin >> age;
    new_stud.setage( age);

    for( size_t i = 0; i < 5; ++i) {
        // I wish to output: "Enter marks in" + subject_name, but harcoding it seems tedious
    }

    cout << "\nTotal Percentage:  " << new_stud.total();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您希望打印出您将要阅读的变量的名称。现在这不能按照你想要的方式完成。你可以做的最好的事情就是创建一个主题名称数组和一系列标记。

string[5] Subjects = {"Maths", "English", "Chemistry", "Physiscs", "Computer Sciences"};
marks[5] Marks;
for(int i=0;i<5;i++) {
  cout << "Please enter marks in " << Subjects[i] << ":" << endl;
  int a;
  cin >> a;
  Marks[i].setmarks(a);
}

您还可以让标记类具有字段主题名称,并为其提供一个函数 inputfromuser(),如下所示:< / p>

class marks {
  int marks;
  string subjectName;
  public:
  void setmarks( int x) {
    marks = x;
  }
  int getmarks() {
    return marks;
  }
  void inputfromuser() {
    cout << "Please enter marks in " << subjectName << ":" << endl;
    cin >> marks;
  }
};

很抱歉,使用 std :: string 类型,我对原始 char [] 处理文本的方式不太满意。