Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281

Чтение с файла. ifstream

01.06.2015, 16:18. Показов 1344. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Нашёл тему, решил помочь человеку, в итоге сам запарился...
Проблема в следующем:
В файле 3 строчки.
На первом круге цикла: Первая строчка считывается корректно в buf и в nstr[i];
На втором круге цикла:
После выполнения команды char buf[255]=""; переменная nstr обнуляется.
f>>buf работает верно, считывает вторую строку.
И наконец nstr[i] = buf; я получаю две записи, которые содержат вторую строку текстового файла( первая утеряна).
На третьем круге цикла аналогично:
Обнуляется---Считывает---Появляется 3 записи с записанной последней строкой.
В итоге я получаю вместо
qqq
www
eee

это:
eee
eee
eee

Очевидно, что виновата переменная buf. Но как сделать чтобы всё выходило правильно я так и не понял.
Есть предположения?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//////////////////////////////////
char  *nstr[50]; //namestring
////////////////////////////////
int GetFromFile(char*filename, int type)
{
    int i = 0;
    ifstream f;
    f.open(filename,std::fstream::in);  
    char * a ;  
    while(!f.eof())
    {   
        char buf[255]="";       
        f>>buf;
        if(type==1)
        {       
            nstr[i] = buf;      
        }
        else if(type==2) sstr[i] = buf;
        else if(type==3) mstr[i] = buf;
        else std::cout<<"error";
        i++;        
    }   
    f.close();
return i;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2015, 16:18
Ответы с готовыми решениями:

Чтение с файла ifstream
не работает чтение из файла #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;stdio.h&gt; using namespace...

Чтение бинарного файла ifstream
есть бинарный файл 10101010101111010101011011001101001010100010 нужно прочить его в массив как числа, как? спасибо

Чтение файла через ifstream в stringstream
Помогите разобраться, есть функция LOAD_DATA(std::string path_File) для чтения файла по пути открываю файл через ifstream, и не могу...

2
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
01.06.2015, 16:35
Нужно выделить память и скопировать в неё содержимое buf.
Премерно так:

C++
1
2
3
4
5
6
if(type==1)
        {       
            nstr[i] = new char[strlen(buf)+1];      
memcpy(nstr[i], buf, strlen(buf)+1);
 
        }
И потом соответственно не забыть её освободить.

Сейчас в вашей реализации, в nstr хранятся укзатели на одну и туже область памяти, которую вы на каждой итерации перезаписываете.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
01.06.2015, 16:50
Или под buf выделять память в куче, а указатель на эту память сохранять в массиве указателей.

Добавлено через 6 минут
Как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    while(true)
    {   
        char* buf = new char[255]; 
        f >> buf;
        if (!f)
        {
            delete [] buf;
            break;
        }
        
        if(type==1)
        {       
            nstr[i] = buf;      
        }
        else if(type==2) 
            sstr[i] = buf;
        else if(type==3) 
            mstr[i] = buf;
        else std::cout<<"error";
        i++;        
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2015, 16:50
Помогаю со студенческими работами здесь

Чтение бинарного файла функцией std::ifstream::read(char*, streamsize)
Не могу нормально считать текст в бинарном режиме с помощью функции read(char*, streamsize). Файл file.txt имеет следующие символы:...

Чтение из файла с использованием ifstream. Отсутствует оператор "==", соответствующий этим операндам
Всем привет! Недавно начал работать с потоками, вылезла вот такая ошибка: Отсутствует оператор &quot;==&quot;, соответствующий этим...

Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии)
Проверил работу программы на маленькой картинке(744 байт). Все работает. С несколько бОльшими файлами(512КБ) нет. Суть задачи в том,...

Чтение и запись в файл. ifstream
как записать в файл и прочитать из него данные? class.h #ifndef CLASS_H #define CLASS_H // класс &quot;Структура...

Чтение из .txt построчно (ifstream)
Здравствуйте, возникли некоторые проблемы с ifstream. Не могу сделать чтение из .тхт файла построчно, да и просто не получается. Вот мой...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru