Как сделать массив произвольной длины?
как быть? Какой размер массива объявить?
Не объявляй никакой. Воспользуйся вместо этого стандартным контейнером, например std::vector.
Но если хочется помучаться -- воспользуйся указателем и выделяй память динамически, по мере поступления входных данных.
делаешь список массивов, после окончания чтения клеишь их в одно целое. либо клеишь на каждом шаге чтения - тут вопрос что важнее критичнее - память или быстродействие.