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

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

Войти
Регистрация
Восстановить пароль
 
 
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
#1

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

07.10.2016, 10:01. Просмотров 544. Ответов 25
Метки нет (Все метки)

Добрый день, столкнулся с такой проблемой. Есть файл со строками из 1 и 0
Пример:
1111110
1111000
1001011
...

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

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


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

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

Считывание данных из файла в структуру - C++
из файла нужно считать данные и записать их в структуру. данные из файла: Петров П.П. С++ для чайников 2000 Программирование ...

Считывание информации из файла в структуру - C++
Добрый день! Помогите, пожалуйста, с решением задачи. Дан символьный файл f, содержащий сведения о студентах, записанные по...

Считывание всей строки из файла в структуру - C++
Привет. Есть программа, считывающая из файла некоторые данные про рабочих и вывод их на экран с использованием структуры. Проблема...

Считывание смешанной строки из файла в структуру - C++
Формат файла и данные записываемые структурной формой такие: Первое ФИО 1 | ж | 2001 | Минск | Неизвестное заболевание | 80291111111 ...

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

Считывание из бинарного файла в структуру с последующим выводом - C++
В бинарном файле храниться инфа: Имя_пользователя дата_подключения номер Имя_пользователя дата_подключения номер и т.д. Есть...

25
nmcf
5983 / 5294 / 1836
Регистрация: 14.04.2014
Сообщений: 21,770
07.10.2016, 10:05 #2
getline() твоя функция. А вот про структуру не понятно, там не строки, а символы. Или надо преобразовать в число и сохранить в char?
0
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 10:24  [ТС] #3
По хорошему s1 это число в двоичной с/с, но как я понял лучше записать его массивом из 1 и 0
0
nmcf
5983 / 5294 / 1836
Регистрация: 14.04.2014
Сообщений: 21,770
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].
1
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 11:28  [ТС] #5
Всего 15 слов, в каждом по 20 1 или 0
0
nmcf
5983 / 5294 / 1836
Регистрация: 14.04.2014
Сообщений: 21,770
07.10.2016, 13:03 #6
А почему показано по 8 бит?
0
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. И какой у них тогда должен быть тип?
0
nmcf
5983 / 5294 / 1836
Регистрация: 14.04.2014
Сообщений: 21,770
07.10.2016, 13:39 #8
Для 20 надо bitset<20>.
Цитата Сообщение от salwlen Посмотреть сообщение
а можно ли каждое "слово" записывать в битовое поле
Как-то понятнее объясни что хочешь. Вроде бы речь об отдельных битах шла. Теперь уже по три?
0
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
07.10.2016, 13:48  [ТС] #9
Слово состоит из 20 бит при этом первые 3 бита называем r1, следующий бит это r2, следующие 5 бит это r3 итд
0
nmcf
5983 / 5294 / 1836
Регистрация: 14.04.2014
Сообщений: 21,770
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;
};
1
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 несколько и все используются в функции
0
nmcf
5983 / 5294 / 1836
Регистрация: 14.04.2014
Сообщений: 21,770
11.10.2016, 12:36 #12
Если функция должна изменять переданные структуры, то используй ссылки.
C++
1
void f(IN &in, OUT &out)
0
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
0
nd2
2720 / 2290 / 817
Регистрация: 29.01.2016
Сообщений: 7,634
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);
0
salwlen
1 / 1 / 0
Регистрация: 27.12.2012
Сообщений: 41
11.10.2016, 16:14  [ТС] #15
Поправил, но проблема не исчезла, причем ошибка не во всех переменных, там где используется bitset все нормально, а вот в структурах где double жалуется на неиспользованную локальную переменную
0
11.10.2016, 16:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2016, 16:14
Привет! Вот еще темы с ответами:

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

Считывание файла в массив и запись нового файла - C++
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и сразу они переписываются в другой файл. В...

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

Считывание из файла - C++
Помогите пожалуйста,никак не могу найти,как считать данные из такого файла: Rup 106 12 38 40.2 -51 09 01 300.88...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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