Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/197: Рейтинг темы: голосов - 197, средняя оценка - 4.89
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49

Чтение из файла в динамический массив

10.07.2015, 18:04. Показов 40427. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Такая проблема. Читаю из файла числа в динамический массив. Сначала посчитал количество символов, создал массив и записываю в него данные из файла. Но при выводе в конце почему то записывается мусор. Помогите пожалуйста как убрать мусор.
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
26
27
28
29
30
31
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    fstream fs("1.txt");
    if (!fs)
    {
        cout << "File not found\n";
        system("pause");
    }
    int count =0;
    char a; 
    
          while(!fs.eof())
          {
           fs>>a;// 
          count++;
          }
        fs.clear();
        fs.seekg(0);
        int *mas=new int[count];
        for (int i=0;i<count;i++)
              fs>>mas[i];
          for (int i=0;i<count;i++)
              cout<<mas[i]<<' ';
          cout<<"\n";
    fs.close();
    system("pause");
}
Миниатюры
Чтение из файла в динамический массив  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2015, 18:04
Ответы с готовыми решениями:

Чтение из файла в динамический массив
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main()...

Чтение из файла в динамический массив
Подскажите, читаю из файла количество элементов, затем элементы, но выводит нули.. Что не так? пример фала: 500 -0,103418643 ...

Чтение из файла в динамический массив
Всем здравствуйте. Рабочий вариант чтения в байтовый массив: ifstream in(sFileName, ios::binary); char* buf; ...

11
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
10.07.2015, 19:33
Почему ты считаешь char'ами, а считываешь int'ами?
C++
1
2
3
4
5
6
7
8
9
    int count =0;
    int a; 
    
          while(true)
          {
           fs >> a;
           if (fs.fail() || fs.eof()) break;
          ++count;
          }
1
 Аватар для Mamoruhiko
45 / 42 / 48
Регистрация: 13.05.2015
Сообщений: 222
10.07.2015, 19:37
Подсчёт символов лучше делайте так:
C++
1
2
while (fs>>a)
count++;
Тогда не будет мусора при выводе.
2
26 / 26 / 15
Регистрация: 17.02.2014
Сообщений: 310
10.07.2015, 19:53
В указали не правильный тип данных так как чар это символ и считывает он по символьно например 10 это два символа 1 и 0

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
26
27
28
29
30
31
32
33
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    fstream fs("1.txt");
    if (!fs)
    {
        cout << "File not found\n";
        system("pause");
    }
    int count = 0;
    int a;
 
    while (!fs.eof())
    {
        fs >> a; 
        count++;
    }
 
 
    fs.clear();
    fs.seekg(0);
    int *mas = new int[count];
    for (int i = 0; i<count; i++)
        fs >> mas[i];
    for (int i = 0; i<count; i++)
        cout << mas[i] << ' ';
    cout << "\n";
    fs.close();
    system("pause");
}
Добавлено через 6 минут
nmcf
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
int count =0;
 int a; 
while(true)
{
fs >> a;
if (fs.fail() || fs.eof()) break;
 ++count;
}
зачем делать два условия в цикле и в разветвлении
C++
1
2
3
4
5
while (!(fs.fail() || fs.eof()))
    {
        fs >> a; 
        count++;
    }
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
10.07.2015, 22:03
Цитата Сообщение от user-men Посмотреть сообщение
зачем делать два условия в цикле
Затем, что флаги устанавливаются после операции чтения.
1
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
11.07.2015, 20:13  [ТС]
спасибо всем за ответы)
что такое флаги?

А можно както сделать чтобы вместо пробела стояла точка с запятой ; в самом файле и также считывать данные в массив. То есть в файле написано 1;2;3;4;5;6;7;8;10 и также считать это в динамический массив a[10]={1,2,3,4,5,6,7,8,9,10}
0
26 / 26 / 15
Регистрация: 17.02.2014
Сообщений: 310
11.07.2015, 20:42
так

1.txt
C++
1
1;2;3;4;5;6;7;8;9;10
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
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    fstream fs("1.txt");
    if (!fs)
    {
        cout << "File not found\n";
        system("pause");
    }
    int count = 0;
    int a;
    char ch;
 
    while (!(fs.fail() || fs.eof()))
    {
        fs >> a; 
        fs >> ch;
        count++;
    }
 
 
    fs.clear();
    fs.seekg(0);
    int *mas = new int[count];
    for (int i = 0; i<count; i++)
        fs >> mas[i],
        fs >> ch;
    for (int i = 0; i<count; i++)
        cout << mas[i] << ' ';
    cout << "\n";
    fs.close();
    system("pause");
}
2
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
12.07.2015, 11:16  [ТС]
Немного не понял, можно поподробней, а что собственно изменилось?
добавили переменную, а зачем? как это работает?
0
26 / 26 / 15
Регистрация: 17.02.2014
Сообщений: 310
12.07.2015, 18:30
Цитата Сообщение от FRINGE Посмотреть сообщение
как это работает?
Можно было бы сделать и по другому, но я сделал в вашем стиле, в переменную int (a) считываются число а в переменную char (ch) считывается 1 символ, вот и получается сначала считывается число (любое 1, 10 ,64 и т.д) а затем символ (любой один символ, "," ";" "*" и т.д)
C++
1
2
3
for (int i = 0; i<count; i++)
        fs >> mas[i],
        fs >> ch;
в массив записываем полезную информацию, в данном случае полезная информация-это числа, а символы в переменную так как они нам не нужны
1
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
15.07.2015, 13:17  [ТС]
А можно ли как нибудь считать слова через точку сзапятой??
Например в файле хранится:
C++ (Qt)
1
собака;кошка;змея;лягушка;попугай
Считать это в строку-массив размером 5

Добавлено через 48 секунд
Понимаю что нужно использоват string, но как разделить через эту точку с запятой не знаю)
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
15.07.2015, 13:38
Цитата Сообщение от FRINGE Посмотреть сообщение
А можно ли как нибудь считать слова через точку сзапятой??
Например в файле хранится:
Код C++ (QT)Выделить код
1
собака;кошка;змея;лягушка;попугай
Считать это в строку-массив размером 5
std::getline в помощь, http://ru.cppreference.com/w/c... ng/getline
1
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
15.07.2015, 15:01  [ТС]
Большое спасибо, разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.07.2015, 15:01
Помогаю со студенческими работами здесь

Чтение данных из файла в динамический массив структур
Здравствуйте, подскажите пожалуйста, как можно осуществить чтение данных из файла в динамический массив структур? Или может можно как то...

Чтение из бинарного файла в линейный динамический список
У меня есть бинарный файл,который содержит массив структур.Нужно на основании этого файла создать линейный динамический список.Как...

Заполнить динамический массив из файла и записать массив обратно в файл
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из файла и обратную которая этот массив запишет в файл=)

Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла
задача: передать динамический массив в функцию, и записать в каждый элемент строку из файла. количество строк известно вот что у меня...

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив, причем использовал класс-наследник от...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru