Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод из файла через ifstream, Считать из файла динамический массив 
V
    Опции темы
SunRaider
Дата 26.2.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 10.5.2007

Репутация: нет
Всего: -1



Возник такой вопрос. Есть следующий код:

Код

            ifstream in("test.txt");
    if(!in)
    {
        cout << "Не удается открыть файл" << endl;
        return 1;
    }
    else
    {
        int size;
        cout << "Введите размерность массива -> "; 
        cin >> size;
        double* array = new double [ size ] ;
        for (int i = 0; i < size; ++i)
        {
            in >> array [i];
        }
        delete array;
        in.close();
    }    return 0;

Пользователь сначала вводит размерность массива size, а потом массив заполняется из файла. Но тут возникает проблема: а если size больше чем есть чисел в файле? Поэтому вопрос следующий: можно ли сделать так чтобы первое читаемое из файла число было размерностью массива, а далее массив заполнялся уже со второго? 

Заранее спасибо. 
PM MAIL   Вверх
ИванМ
Дата 26.2.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Чтение так:

Код

    ifstream in("test.txt");
    if(!in)
    {
        cout << "Не удается открыть файл" << endl;
        return 1;
    }
    else
    {
        int size;
        in >> size;
        double* array = new double [ size ] ;
        for (int i = 0; i < size; ++i)
        {
            in >> array [i];
        }
        delete array;
        in.close();
    }    
    return 0;


А запись так:

Код

    ofstream out("test.txt");
    if(!out)
    {
        cout << "Не удается открыть файл" << endl;
        return 1;
    }
    else
    {
        int size=/*число элементов*/;
        out << size;
        double* array = new double [ size ] ;
        
       //здесь должно быть запонение массива

        for (int i = 0; i < size; ++i)
        {
            out << array [i];
        }
        delete array;
        out.close();
    }    
    return 0;


Это сообщение отредактировал(а) ИванМ - 26.2.2009, 20:14
PM MAIL   Вверх
SunRaider
Дата 26.2.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 10.5.2007

Репутация: нет
Всего: -1



Код

 ifstream in("test.txt");
    if(!in)
    {
        cout << "Не удается открыть файл" << endl;
        return 1;
    }
    else
    {
        int size;
        in >> size;
        double* array = new double [ size ] ;
        for (int i = 0; i < size; ++i)
        {
            in >> array [i];
        }
        delete array;
        in.close();
    }    
    return 0;


Так получается что размерность массива и первый элемент это одно и тоже число. Может я сформулировал неудачно. Я имел в виду что перове число в файле должно быть size, а нулевой элемент уже вторым символом в файле. 
PM MAIL   Вверх
Dmi3ev
Дата 26.2.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 1
Всего: 41



да

Добавлено через 57 секунд
где-то так
Код

5
1
2
3
4
5



--------------------

PM MAIL   Вверх
ИванМ
Дата 26.2.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Цитата(SunRaider @  26.2.2009,  21:24 Найти цитируемый пост)
Я имел в виду что перове число в файле должно быть size, а нулевой элемент уже вторым символом в файле.  

Так и сделано
PM MAIL   Вверх
SunRaider
Дата 26.2.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 10.5.2007

Репутация: нет
Всего: -1



ИванМ, пардон, ступил) Проверил, работает как нужно. Спасибо)
PM MAIL   Вверх
zim22
Дата 2.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(ИванМ @  26.2.2009,  20:10 Найти цитируемый пост)
delete array;

надо delete [] array;



--------------------
PM MAIL   Вверх
SunRaider
Дата 6.3.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 10.5.2007

Репутация: нет
Всего: -1



Здесь это непринципиально, оно и так сработает. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.