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

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

Восстановить пароль Регистрация
 
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
10.07.2015, 18:04     Чтение из файла в динамический массив #1
Здравствуйте.
Такая проблема. Читаю из файла числа в динамический массив. Сначала посчитал количество символов, создал массив и записываю в него данные из файла. Но при выводе в конце почему то записывается мусор. Помогите пожалуйста как убрать мусор.
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");
}
Миниатюры
Чтение из файла в динамический массив  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4318 / 3739 / 1260
Регистрация: 14.04.2014
Сообщений: 14,669
10.07.2015, 19:33     Чтение из файла в динамический массив #2
Почему ты считаешь 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;
          }
Mamoruhiko
 Аватар для Mamoruhiko
40 / 38 / 20
Регистрация: 13.05.2015
Сообщений: 219
10.07.2015, 19:37     Чтение из файла в динамический массив #3
Подсчёт символов лучше делайте так:
C++
1
2
while (fs>>a)
count++;
Тогда не будет мусора при выводе.
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 300
10.07.2015, 19:53     Чтение из файла в динамический массив #4
В указали не правильный тип данных так как чар это символ и считывает он по символьно например 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++;
    }
nmcf
4318 / 3739 / 1260
Регистрация: 14.04.2014
Сообщений: 14,669
10.07.2015, 22:03     Чтение из файла в динамический массив #5
Цитата Сообщение от user-men Посмотреть сообщение
зачем делать два условия в цикле
Затем, что флаги устанавливаются после операции чтения.
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
11.07.2015, 20:13  [ТС]     Чтение из файла в динамический массив #6
спасибо всем за ответы)
что такое флаги?

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

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");
}
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
12.07.2015, 11:16  [ТС]     Чтение из файла в динамический массив #8
Немного не понял, можно поподробней, а что собственно изменилось?
добавили переменную, а зачем? как это работает?
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 300
12.07.2015, 18:30     Чтение из файла в динамический массив #9
Цитата Сообщение от 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;
в массив записываем полезную информацию, в данном случае полезная информация-это числа, а символы в переменную так как они нам не нужны
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
15.07.2015, 13:17  [ТС]     Чтение из файла в динамический массив #10
А можно ли как нибудь считать слова через точку сзапятой??
Например в файле хранится:
C++ (Qt)
1
собака;кошка;змея;лягушка;попугай
Считать это в строку-массив размером 5

Добавлено через 48 секунд
Понимаю что нужно использоват string, но как разделить через эту точку с запятой не знаю)
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
15.07.2015, 13:38     Чтение из файла в динамический массив #11
Цитата Сообщение от FRINGE Посмотреть сообщение
А можно ли как нибудь считать слова через точку сзапятой??
Например в файле хранится:
Код C++ (QT)Выделить код
1
собака;кошка;змея;лягушка;попугай
Считать это в строку-массив размером 5
std::getline в помощь, http://ru.cppreference.com/w/cpp/str...string/getline
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 15:01     Чтение из файла в динамический массив
Еще ссылки по теме:

Чтение из бинарного файла в линейный динамический список C++
Чтение из файла в динамический массив C++
Ввод данных в динамический массив из файла C++

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

Или воспользуйтесь поиском по форуму:
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
15.07.2015, 15:01  [ТС]     Чтение из файла в динамический массив #12
Большое спасибо, разобрался
Yandex
Объявления
15.07.2015, 15:01     Чтение из файла в динамический массив
Ответ Создать тему
Опции темы

Текущее время: 18:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru