Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 12:07   #1
Nostalgy
 
Регистрация: 23.04.2010
Сообщений: 7
По умолчанию Сортировка

Не работает. Почему?

error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'a' : unknown size


Код:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  int n = 12;
  int a[n];
  ifstream f("data.txt");
  for (int i = 0; i < n; ++i)
  {
    f >> a[i];
    cout << a[i] << endl;
  }
  // sorting
  for (int i = n - 1; i >= 1; --i)
    for (int j = 0; j < i; ++j)
    {
      if (a[j] > a[j + 1])
      {
	int foo = a[j];
	a[j] = a[j + 1];
	a[j + 1] = foo;
      }
    }
  cout << endl;
  for (int i = 0; i < n; ++i)
    cout << a[i] << endl;
}
Nostalgy вне форума Ответить с цитированием
Старый 03.05.2010, 12:12   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Код:
int n = 12;
  int a[n];
В статической памяти так выделять нельзя.
Нужно написать
Код:
const int n = 12;
  int a[n];
или вообще
Код:
#define n 12;
  int a[n];
MaTBeu вне форума Ответить с цитированием
Старый 03.05.2010, 13:47   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

В C++ лучше, конечно же, первое (с const).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 03.05.2010, 16:18   #4
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

некоторые компиляторы такое допускают, к примеру, g++
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 03.05.2010, 17:00   #5
confucius
Пользователь
 
Аватар для confucius
 
Регистрация: 01.05.2010
Сообщений: 15
По умолчанию

Дело не в компиляторе а в языке, эта возможность добавлена в стандарт C99, просто Visual Studio C99 не поддерживает, отсюда и мнение, что
Цитата:
Сообщение от ozo Посмотреть сообщение
некоторые компиляторы такое допускают, к примеру, g++
Цитата:
6.7.5.2 Array declarators
C99 adds a new array type called a variable length array type. The inability to declare arrays
whose size is known only at execution time was often cited as a primary deterrent to using C as
20 a numerical computing language. Adoption of some standard notion of execution time arrays
was considered crucial for C’s acceptance in the numerical computing world.
The number of elements specified in the declaration of a variable length array type is a runtime
expression. Before C99, this size expression was required to be an integer constant expression.
confucius вне форума Ответить с цитированием
Старый 03.05.2010, 17:08   #6
confucius
Пользователь
 
Аватар для confucius
 
Регистрация: 01.05.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
...
или вообще
Код:
#define n 12;
  int a[n];
или вообще STL контейнер
Код:
#include <iostream>
#include <iterator>
#include <fstream>
#include <algorithm>
#include <set>

int main()
{
	std::ifstream file("data.txt");
	std::set<int> data((std::istream_iterator<int>(file)), (std::istream_iterator<int>()));
	std::copy(data.begin(), data.end(), std::ostream_iterator<int>(std::cout, "\n"));
}
confucius вне форума Ответить с цитированием
Старый 03.05.2010, 18:31   #7
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от confucius Посмотреть сообщение
Дело не в компиляторе а в языке, эта возможность добавлена в стандарт C99, просто Visual Studio C99 не поддерживает, отсюда и мнение, что
Отсюда не мнение, это был шутка и юмор
Ибо шел 2010 год
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 03.05.2010, 19:37   #8
confucius
Пользователь
 
Аватар для confucius
 
Регистрация: 01.05.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
Отсюда не мнение, это был шутка и юмор
Ибо шел 2010 год
просто прозвучало как обвинение gcc в несоответствии, решил внести ясность
confucius вне форума Ответить с цитированием
Старый 03.05.2010, 19:46   #9
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от confucius Посмотреть сообщение
просто прозвучало как обвинение gcc в несоответствии, решил внести ясность
Пусть немного оффтопика: но таки gcc во многом уже держит C++0x( а нынешний стандарт наверное весь, кстати, совсем недавно таки выкинули iostream.h и иже с ним ), пусть он не самый быстрый компилятор( как и по быстроте кода, так и по скорости ), но это таки многое значит и ему бесспорный плюс.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 03.05.2010, 20:19   #10
confucius
Пользователь
 
Аватар для confucius
 
Регистрация: 01.05.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
Пусть немного оффтопика: но таки gcc во многом уже держит C++0x( а нынешний стандарт наверное весь.
ну откровенно говоря gcc не святой у него тоже не мало несоответствий (правда, не так много как в VC, но все же), а уж весь стандарт он точно не поддерживает, как минимум экспорт шаблонов там не поддерживается. Идеальных компиляторов не бывает :P
очень хвалят comeau в этом вопросе, но посмотреть на него мне пока не посчастливилось. А компилятор gcc и вправду неплохой.

Последний раз редактировалось confucius; 03.05.2010 в 20:22.
confucius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32