【问题标题】:c++ adding one by one to array till fullc ++将数组一一添加到满
【发布时间】:2017-02-22 03:42:46
【问题描述】:

我正在尝试在数组中添加一个等级直到满,然后我需要返回为真。

我正在使用的无效 = cpp.sh/9np2

这里是代码

void GetGrades(StatsList* stats)
{
  ListType grade = 0;
  while (grade != -1)
 {
    cout << "Enter grade (-1 quits):";
    cin >> grade;
    if (!cin)
    {
        cin.clear();
        cin.ignore(2000, '\n');
        cout << "Invalid number" << endl;
    }
    else if (grade >= MINGRADE && grade <= MAXGRADE)
    {       
        if (!stats->NewGrade(grade))
        {
            cout << grade << " not entered - grade list is full" << endl;
        }
    }
    else
    {
        if (grade != -1)
            cout << "Grade out of range" << endl;
    }

 }
}

我正在使用的类函数 = cpp.sh/2jkz

bool StatsList::NewGrade(ListType grade)
{
  int i = 0;
  bool full = (List[6] == '\0');

  if (full){
      List[i] = grade;
      i++;
      cout << grade;
 }
  return false;
}

我厌倦了 AF,我似乎无法弄清楚我做错了什么,请帮助一个女孩。我只是想在睡觉前了解我做错了什么。

【问题讨论】:

  • 很抱歉第一次使用这个网站让我尝试修复
  • 是我还是你的 NewGrade 函数总是返回 false ???
  • 两件事,请询问实际问题,并考虑使用 std::vector 而不是“原始”假设您不了解 std::list
  • OP 知道List 的最大大小,为什么要忍受vector 的额外开销,而固定大小的数组就可以了?我可以看到std::array 的案例,但我什至认为这有点过分了。

标签: c++ arrays function boolean void


【解决方案1】:

bool StatsList::NewGrade(ListType grade) 有几个问题。

  1. i 需要在调用之间持续存在,否则它将在函数开头始终设置为 0。我建议给它一个更具描述性的名称,例如 listindex,并将其设为成员变量。
  2. 没有return true。放置它的合理位置似乎是在 if (full) 正文中的末尾。

关于full 的一句话。如果List 已满,full 为真。这种命名的不实只会误导人们,并导致将来维护代码的人注入错误。我建议更改名称或更改使用方式。更改名称对我来说似乎更合乎逻辑。

【讨论】:

  • 所以我将 i 更改为 listindex 并将 listindex 作为公共变量从我的班级中分离出来?
  • 推荐一个private 变量,因为该类的用户不需要直接访问列表索引,使用它会造成很大的危害。例如。 obj.listindex=100; 索引现在将超出范围并且程序的行为不可预测。如果listindex 是私有的,那么这样的错误将引发编译器错误。一般的经验法则是使所有数据private 并允许通过访问函数进行有限访问,除非您有一个非常非常非常的充分理由不这样做。更多信息,搜索关键字是“数据隐藏”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2017-12-22
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多