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

Считывание из файла в структуру - C++

Восстановить пароль Регистрация
 
 
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 10:01     Считывание из файла в структуру #1
Добрый день, столкнулся с такой проблемой. Есть файл со строками из 1 и 0
Пример:
1111110
1111000
1001011
...

Все строки одного размера

Нужно каждую строку считать в отдельное "слово" записанное в структуре
C++
1
2
3
4
struct slova
{
char s1,s2,s3; //...
};
Где "слово" s1 это первая строка (без разделителей \n)


В дальнейшем эти слова будут анализироваться(каждый разряд 1 или 0 соответствует своей команде), так что к каждому разряду должен быть доступ к примеру s1[5].

Пробовал считывать getline, но он считывает только первую строку. Так же пробовал с read, но в некоторых словах вышел "мусор", а в первом слове было несколько строк.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2016, 10:01     Считывание из файла в структуру
Посмотрите здесь:

считывание с файла C++
Считывание данных из файла в структуру C++
Считывание из файла C++
считывание из файла C++
C++ Считывание из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
07.10.2016, 10:05     Считывание из файла в структуру #2
getline() твоя функция. А вот про структуру не понятно, там не строки, а символы. Или надо преобразовать в число и сохранить в char?
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 10:24  [ТС]     Считывание из файла в структуру #3
По хорошему s1 это число в двоичной с/с, но как я понял лучше записать его массивом из 1 и 0
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
07.10.2016, 11:13     Считывание из файла в структуру #4
А сколько этих слов-то? Фиксированное количество? У тебя всего 3 элемента в структуре.
Используй bitset вместо char по такому принципу:
C++
1
2
3
4
bitset<8> s1;
 
ifstream ifs("data.txt");
ifs >> s1;
Потом к битам можно обращаться как к массиву: s1[i].
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 11:28  [ТС]     Считывание из файла в структуру #5
Всего 15 слов, в каждом по 20 1 или 0
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
07.10.2016, 13:03     Считывание из файла в структуру #6
А почему показано по 8 бит?
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 13:35  [ТС]     Считывание из файла в структуру #7
Это был просто пример, с 20 тоже работает спасибо за помощь.
Еще один вопрос, а можно ли каждое "слово" записывать в битовое поле
C++
1
2
3
4
5
6
7
struct s1
{ 
тип r1:3;
тип r2:1;
Тип : 5;
//...
};
При этом есть безымянные(резерв) и длинна разная. Т.е r1 это 111. И какой у них тогда должен быть тип?
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
07.10.2016, 13:39     Считывание из файла в структуру #8
Для 20 надо bitset<20>.
Цитата Сообщение от salwlen Посмотреть сообщение
а можно ли каждое "слово" записывать в битовое поле
Как-то понятнее объясни что хочешь. Вроде бы речь об отдельных битах шла. Теперь уже по три?
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 13:48  [ТС]     Считывание из файла в структуру #9
Слово состоит из 20 бит при этом первые 3 бита называем r1, следующий бит это r2, следующие 5 бит это r3 итд
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
07.10.2016, 16:46     Считывание из файла в структуру #10
C++
1
2
3
4
5
6
7
8
9
10
union u
{
    struct
    {
        unsigned r1: 3;
        unsigned r2: 1;
        unsigned r3: 5;
    };
    unsigned dword;
};
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
11.10.2016, 11:37  [ТС]     Считывание из файла в структуру #11
Решил ввод/вывод перенести из int main () в функцию и столкнулся с рядом проблем. Когда я считывал все в int main() я объявлял структуры
C++
1
2
3
4
5
6
int main()
{
struct IN inn
struct OUT out
 
}
И все работало нормально.
Как будет правильнее объявлять их с функцией?
Что должна возвращать функция?
Нужно ли использовать указатели на структуру?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct IN
{
//...
};
struct OUT
{
//...
};
int f(IN,OUT)
{
//считывание файлов в структуры IN и OUT
}
int main()
{
int f(IN,OUT);
//...
return 0;
}
Структур IN и OUT несколько и все используются в функции
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
11.10.2016, 12:36     Считывание из файла в структуру #12
Если функция должна изменять переданные структуры, то используй ссылки.
C++
1
void f(IN &in, OUT &out)
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
11.10.2016, 15:40  [ТС]     Считывание из файла в структуру #13
У меня в int main() помимо функции считывания используются переменные из структур, и
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void f(IN &inn, OUT &out)
{
//считывание
}
int main()
{
struct IN inn;
struct OUT out;
void f(IN &inn, OUT &out);
//...
//операции с переменными структур
 
return 0;
}
компилятор жалуется на строки с операциями: использована неинициализированная локальная переменная inn
nd2
1020 / 759 / 255
Регистрация: 29.01.2016
Сообщений: 2,373
11.10.2016, 15:59     Считывание из файла в структуру #14
Цитата Сообщение от salwlen Посмотреть сообщение
C++
1
2
3
struct IN inn;
struct OUT out;
void f(IN &inn, OUT &out);
Функция так вызывается:
C++
1
2
3
struct IN inn;
struct OUT out;
f(inn, out);
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
11.10.2016, 16:14  [ТС]     Считывание из файла в структуру #15
Поправил, но проблема не исчезла, причем ошибка не во всех переменных, там где используется bitset все нормально, а вот в структурах где double жалуется на неиспользованную локальную переменную
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
11.10.2016, 16:19     Считывание из файла в структуру #16
Больше покажи. Так не понятно. И слово struct пишется только один раз при описании структуры.
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
11.10.2016, 17:10  [ТС]     Считывание из файла в структуру #17
Упростил как мог
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <bitset>
#include <math.h>
 
using namespase std;
 
 
struct slova
{
    bitset<16> s1, s2; //таких 15 
    
};
 
struct IN1
{
    double a,b,c
};
 
struct OUT1
{
    
    double d,e,f;
};
 
 
void f_IN(slova &sn, IN1 &inn1, IN2 &inn2, OUT1 &out1, OUT2 &out2, OUT3 &out3, OUT4 &out4, OUT5 &out5)
{
    setlocale(LC_ALL, "Russian");
 
 
    
    //struct slova sn;
    ifstream ifs("slova.txt");
    //if (!ifs){
        //cout << "\n";
        //return 1;
    //}
 
    ifs >> sn.s1;
    
 
    ifs.close();
 
 
    ifstream ifin("in1.txt");
 
 
    ifin >> inn1.a;
    ifin >> inn1.b;
    ifin >> inn1.c;
    
 
    ifin.close();
 
 
    ifstream ifinDop("in3.txt");
    
 
    ifinDop >> out1.d;
    ifinDop >> out1.e;
    ifinDop >> out1.f;
 
 
    ifinDop.close();
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    slova sn;
    IN1 inn1;
    IN2 inn2;
    OUT1 out1;
    OUT2 out2;
    OUT3 out3;
    OUT4 out4;
    OUT5 out5;
    void f_IN(slova, IN1, IN2, OUT1, OUT2, OUT3, OUT4, OUT5);
 
    
    ofstream ofout1("out1.txt");
    if (!ofout1){
        cout <<"  out1.\n";
        return 1;
    }
 
    ofout1 << out1.d << endl;
    ofout1 << out1.f << endl;
    ofout1 << out1.e << endl;
    
 
    ofout1.close();
 
 
 
    
    
    std::system("pause");
    return 0;
}
nd2
1020 / 759 / 255
Регистрация: 29.01.2016
Сообщений: 2,373
11.10.2016, 17:38     Считывание из файла в структуру #18
Цитата Сообщение от salwlen Посмотреть сообщение
void f_IN(slova, IN1, IN2, OUT1, OUT2, OUT3, OUT4, OUT5);
void убери.

Добавлено через 1 минуту
Цитата Сообщение от salwlen Посмотреть сообщение
Упростил как мог
Открытие файлов для чтения проверяешь?
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
11.10.2016, 18:03  [ТС]     Считывание из файла в структуру #19
Проверял, в функции закоментил, тк на return 1; жаловался. Void заменил на int, добавил return 0; в конец функции, раскоментил проверку открытия. Но основную проблему это не решает.

Добавлено через 7 минут
В файл out1.txt выводятся одни нули и перенос на строку вместо значений. Когда было все в int main нормально выводилось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2016, 18:05     Считывание из файла в структуру
Еще ссылки по теме:

Считывание данных из текстового файла в структуру C++
Считывание информации из файла в структуру C++
C++ Считывание всей строки из файла в структуру

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

Или воспользуйтесь поиском по форуму:
nd2
1020 / 759 / 255
Регистрация: 29.01.2016
Сообщений: 2,373
11.10.2016, 18:05     Считывание из файла в структуру #20
Цитата Сообщение от salwlen Посмотреть сообщение
Void заменил на int
Где заменил? При вызове убери.
Цитата Сообщение от salwlen Посмотреть сообщение
Проверял, в функции закоментил, тк на return 1;
Другие (кроме "slova.txt") проверяешь на открытие?
Код показывай.
Цитата Сообщение от salwlen Посмотреть сообщение
Но основную проблему это не решает.
Какая у нас "основная проблема"?
Yandex
Объявления
11.10.2016, 18:05     Считывание из файла в структуру
Ответ Создать тему
Опции темы

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