Читайте оценку учеников по массиву C ++ [дубликаты]

0

Эта простая программа для чтения класса студентов. Я хочу принять, сколько учеников пользователь хочет ввести, но когда я пишу int g[size]; это будет ошибка компиляции! Интересно, как я могу написать это правильно?

#include <iostream> 
using namespace std;

    int main()
    {
        int x;
        cout << "Enter how many student ..?  ";
        cin >> x;
         const int size = x;
        int g[size];
        cout << "enter " << size << "your ";
        for (int i = 0; i < size; i++){
            cin >> g[i];
        }
        for (int i = 0; i < size; i++){
            cout << "student" << i + 1 << "grade is : " << g[i] << endl;
        }

   system("pause");
    return 0 ;
}
  • 1
    "но когда я пишу int g [size], это не работает!" Что именно вы подразумеваете под этим не работает ? Не скомпилируется? Сбои? Не делает то, что вы ожидали? Быть конкретной.
  • 0
    Что вы подразумеваете под "это не работает"? Есть ли ошибка? Если результат отличается от того, что вы хотите, каким образом? Пожалуйста, дайте нам больше деталей.
Показать ещё 7 комментариев
Теги:

1 ответ

1
Лучший ответ

Строка int g[size]; вызывает ошибку компиляции, потому что size неизвестен во время компиляции (но, очевидно, во время выполнения). Поэтому вам нужно выделить память для массива во время выполнения.

int *g = new int[size]; // instead of int g[size];

Это сохраняет указатель на первый элемент массива в g. Теперь компилятор больше не может отслеживать время жизни массива и удалять его для вас, когда он больше не нужен, поэтому вам тоже нужно сделать это самостоятельно.

delete[] g; // this frees the memory again
system("pause");

В качестве дополнительной заметки: ваша программа действительна C++ 14, которая еще не полностью (полностью) поддерживается компилятором Microsoft Visual C++, но другие компиляторы, такие как clang и g++, уже поддерживают его.

  • 0
    Спасибо :) Интересно, в чем разница между с ++ 11 и с ++ 14 ...?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню