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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
#1

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

10.07.2015, 18:04. Просмотров 2515. Ответов 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
Миниатюры
Чтение из файла в динамический массив  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2015, 18:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла в динамический массив (C++):

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

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

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

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

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

Чтения файла в динамический массив - C++
Добрый день. Файл состоит из 6 столбцов и миллионов рядков. Нужно прочесть все это в динамический массив, проблема заключается в том что...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
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;
          }
1
Mamoruhiko
40 / 38 / 20
Регистрация: 13.05.2015
Сообщений: 222
10.07.2015, 19:37 #3
Подсчёт символов лучше делайте так:
C++
1
2
while (fs>>a)
count++;
Тогда не будет мусора при выводе.
1
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
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++;
    }
1
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
10.07.2015, 22:03 #5
Цитата Сообщение от user-men Посмотреть сообщение
зачем делать два условия в цикле
Затем, что флаги устанавливаются после операции чтения.
1
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}
0
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
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");
}
1
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
12.07.2015, 11:16  [ТС] #8
Немного не понял, можно поподробней, а что собственно изменилось?
добавили переменную, а зачем? как это работает?
0
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
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;
в массив записываем полезную информацию, в данном случае полезная информация-это числа, а символы в переменную так как они нам не нужны
1
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
15.07.2015, 13:17  [ТС] #10
А можно ли как нибудь считать слова через точку сзапятой??
Например в файле хранится:
C++ (Qt)
1
собака;кошка;змея;лягушка;попугай
Считать это в строку-массив размером 5

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

Заполнить динамический массив из файла - C++
Здравствуйте, помогите пожалуйста разобраться со следующим вопросом. Мне нужно чтобы все символы из фала или введенные пользователем...

Ввод данных в динамический массив из файла - C++
В задаче написано: введение данных в динамический массив делать из файла. Как это?

Ввод данных в динамический массив из файла - C++
написал программу, вроде все по правилам,только почему-то каждый раз переходит по стрелке &quot;файл не открыт&quot; #include &lt;iostream&gt; ...

Считывание файла в динамический массив построчно - C++
Все мои варианты зависали или вылетали при большом колличество слов в файле.. Если же слов в районе 50, всё работало.. помогите пожалуйста....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2015, 15:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru