Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
#1

Как инициализировать глобальную переменную в зависимости от количества строк в файле - C++

20.01.2014, 17:05. Просмотров 514. Ответов 11
Метки нет (Все метки)

Есть переменная типа
C++
1
int glob = 3;
объявлена в не main(), т.е. глобальная.
После неё, тоже не в mаin, объявлены структуры ex:
C++
1
struct buffer[glob ];
далее: есть файл произвольный с n строками.
имеется функция для подсчёта строк
C++
1
2
3
4
5
6
7
int count_string(FILE *file) //возвращает кол-во строк в файле
{
char string[dlina];
int j = 0;
while(fgets(string,dlina,file)!=NULL)j++;
return j;
}
она непосредственно вызывается в main().

Собственно вопрос: как инициализировать глобальную переменную в зависимости от кол-ва строк в файле???
Детский вопрос, но я как-то запутался, помогите плиз (я думаю, что нельзя)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 17:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как инициализировать глобальную переменную в зависимости от количества строк в файле (C++):

Как создать глобальную переменную? - C++
Создаю небольшой проект. Несколько функций и собственно тело программы. В теле объявил переменную int rep. Далее мне надо обратиться к ней...

Как обьявить глобальную переменную - C++
Как объявить глобальную переменную Есть несколько *CPP* и *.h* файлы. Надо объявить переменную HWND hwnd чтобы она была доступна в...

Как глобальную переменную засунуть в структуру? - C++
#include<stdio.h> #include<malloc.h> #include<string.h> typedef struct Item { char *info; struct Item *next; ...

Как объявить глобальную переменную в Dev-C++ 4.9.9.2? - C++
Попробовал написать из справочника по С++ такую программу: #include <iostream> #include <windows.h> using namespace std; void...

Как обьявить глобальную переменную в функции? - C++
Вопрос как объявить переменную в функции чтобы ей можно было пользоваться везде?

Как сделать одну глобальную переменную - C++
Есть многофайловый проект. К примеру 5 файлов(5 "H" файлов+для них 5 "срр" файлов, пускай в каждом файле будет лежать класс) и есть...

11
Croessmah
Эксперт CЭксперт С++
13509 / 7667 / 866
Регистрация: 27.09.2012
Сообщений: 18,864
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 17:12 #2
C++
1
struct buffer[glob ];
имя структуры забыли?

Добавлено через 1 минуту
C++
1
int glob = count_string("c:\\boot.ini");
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
20.01.2014, 17:13 #3
Цитата Сообщение от танкист34 Посмотреть сообщение
как инициализировать глобальную переменную в зависимости от кол-ва строк в файле?
В нужном месте присвойте ей нужное значение.
Значение глобальной переменной не пропадет до следующего присваивания..
0
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
20.01.2014, 17:31  [ТС] #4
Цитата Сообщение от Croessmah Посмотреть сообщение
1
int glob = count_string("c:\\boot.ini");
так не получится и не получается. Причина: массив структур требует const int в качестве кол-ва элементов, а const int переинициализировать заново нельзя.

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
В нужном месте присвойте ей нужное значение.
Значение глобальной переменной не пропадет до следующего присваивания..
я не зря про массив структур написал, они требуют чтобы кол-во элементов было объявлено или через define, или через const int
0
Croessmah
Эксперт CЭксперт С++
13509 / 7667 / 866
Регистрация: 27.09.2012
Сообщений: 18,864
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 17:35 #5
Цитата Сообщение от танкист34 Посмотреть сообщение
Причина: массив структур требует const int в качестве кол-ва элементов
где в первом посте const?
C++
1
int glob = 3;
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
20.01.2014, 17:37 #6
C++
1
2
3
4
5
6
int glob;
int main()
{
    glob=count_string("c:\\boot.ini");
   ....
}
0
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
20.01.2014, 17:42  [ТС] #7
Цитата Сообщение от Croessmah Посмотреть сообщение
где в первом посте const?
C++
1
int glob = 3;
дак его и нет, так как я спрашиваю.. понимаю что упустил, надо было написать как есть, просто, я думал, что все знают что кол-во элементов в массиве структур должно обладать таким типом.
но вопрос всё равно остаётся.

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
int glob;
int main()
{
    glob=count_string("c:\\boot.ini");
   ....
}
если добавим массив структур:
C++
1
2
3
4
5
6
7
8
9
10
int glob;
struct tip
{int a;
};
struct tip test[glob];
int main()
{
    glob=count_string("c:\\boot.ini");
   ....
}
получим сообщение, что для инициализации массива, glob должно быть типом const int (типо того)
0
Croessmah
Эксперт CЭксперт С++
13509 / 7667 / 866
Регистрация: 27.09.2012
Сообщений: 18,864
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 17:54 #8
Цитата Сообщение от танкист34 Посмотреть сообщение
просто, я думал, что все знают что кол-во элементов в массиве структур должно обладать таким типом.
Может Вы VLA используете? Мы ж экстрасенсы великие тут...

Используйте std::vector и не парьтесь
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
20.01.2014, 17:55 #9
танкист34, размер массива должен быть константой времени компиляции, а ты glob хочешь инициализировать во время выполнения программы. Выделяй память под массив динамически.
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
20.01.2014, 17:57 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
int glob;
struct tip
{int a;
};
tip *test;
int main()
{
    glob=count_string("c:\\boot.ini");
     test=new tip[glob];
   ....
}
1
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
26.01.2014, 18:48  [ТС] #11
а память высвободить вот так?:
C++
1
delete [] test;
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.01.2014, 19:05 #12
Да, так.
0
26.01.2014, 19:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 19:05
Привет! Вот еще темы с ответами:

Как правильно создать глобальную переменную? - C++
Как правильно создать глобальную переменную? Если она будет в заголовочном файле, то при подключении этого файла к другим cpp, эта...

Как и где описать глобальную переменную? - C++
Как и где описать глобальную переменную? В главном класее я определяю указутель на CDaoDatabase CDaoDatabase* DBase; DBase = new...

Как лучше сделать глобальную переменную? - C++
Интернет совсем пустой в плане глобальных переменных на с++ Задача следующая: 1. Нужно создать много глобальных переменных будет...

Можете подсказать,как правильно описать глобальную переменную - C++
Как правильно описать глобальную переменную чтоб читалась во всех формах программы,и можно ли ,допустим при нажатие на кнопку в форме2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru