Member 13877014 Ответов: 2

У меня есть проблема в нижеприведенном коде


там написано требуется постоянное выражение
в чем проблема с 3-мя массивами?

Что я уже пробовал:

#include<iostream.h>
#include<conio.h>
int main()
{
    int n,i=0,m=0,unit[n];
    float grade[n];
    char name[n];
    cout<<"How many lessons did you take?";
    cin>>n;
    for(i;i<n;i++)
    {
        cout<<"\n Enter the name of your lesson"<<": \t";
        cin>>name[i];
        cout<<"\n Enter the units"<<": \t";
        cin>>unit[i];
        cout<<"\n Enter the grade"<<": \t";
        cin>>grade[i];
    }
    cout<<"\n your resaults:";
    cout<<"\n Lesson \t"<<"Units \t"<<"\t Grade \n";
    for(m;m<n;m++)
    {
        cout<<name[m]<<"\t"<<unit[m]<<"\t"<<"\t"<<grade[m];
    }

    getch();
    return 0;
}

jeron1

int n,i=0,m=0,unit[n];
класс поплавка[n];
имя char[n];

Вы объявляете массивы, если размер n, но n неизвестно во время компиляции. Вы либо должны выделить больше, чем, как вы думаете, вам когда-либо понадобится, например
имя char[100];

или динамически выделять память с помощью оператора "new", например,
n = 100;
char *a = новый символ[n];
но не забывайте о соответствующем операторе "удалить".


или, возможно, использовать контейнеры std, такие как std::vector и std::strings, лично мне нравятся контейнеры.

2 Ответов

Рейтинг:
0

CPallini

Эй чувак, C++ не является C. Пробовать

using namespace std;

struct Lesson
{
  string name;
  int unit;
  double grade;
};

ostream & operator << ( ostream & os, const Lesson & lesson);

istream & getLesson( istream & is, ostream & os, Lesson & lesson);

int main()
{
  size_t n;
  vector <Lesson> vl;
  cout << "how many lessons did you take?\n";
  cin >> n;
  for (size_t l = 0; l<n && cin; ++l)
  {
    Lesson lesson;
    if ( getLesson(cin, cout, lesson) )
      vl.push_back(lesson);
  }

  for (const auto & lesson : vl)
    cout << lesson << "\n";
}

ostream & operator << ( ostream & os, const Lesson & lesson)
{
  os << lesson.name << "\t" << lesson.unit << "\t" << lesson.grade;
  return os;
}

istream & getLesson( istream & is, ostream & os, Lesson & lesson)
{
  os << "enter the name:\t";
  is >> lesson.name;
  os << "enter the unit:\t";
  is >> lesson.unit;
  os << "enter the grade:\t";
  is >> lesson.grade;
  return is;
};


Mohibur Rashid

Хороший ответ. Но это все равно, что показать кому-то, как плавать на земле, а затем бросить его в середину циклона и попросить его использовать свои уроки.

Даже если вы уже все выложили. Но этот парень все еще изо всех сил пытается объявить массив. :)

CPallini

Я мог бы сделать и хуже... :-)

Mohibur Rashid

Пожалуйста, дай мне послушать. :-)

Рейтинг:
0

Patrice T

Какую бы версию C++ вы ни использовали, вы не можете объявлять массивы динамического размера n прежде чем узнать n.

int n,i=0,m=0;
cout<<"How many lessons did you take?";
cin>>n;
int unit[n];
float grade[n];
char name[n];

если это не сработает, вам нужно будет увидеть синтаксис для выделения динамических массивов