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

Файловый ввод в структуру через запятую

19.12.2021, 21:48. Показов 1186. Ответов 11

Студворк — интернет-сервис помощи студентам
Файл имеет несколько данных разделенных запятой, при добавлении в структуру выдает ошибку: Вызвано исключение по адресу 0x7B0C5DC3 (msvcp140d.dll) в ConsoleApplication5.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00ACB040.
Пример файла: Иванов Иван Иванович, 9773672365, 12.10.2012, 12.10.2014,0,0
Петров Иван Васильевич, 9734672311, 22.01.2008, 01.11.2011,210,200
Васильев Илья Васильевич, 9714679805, 05.09.2010, 01.12.2012,0,2000
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
#include <iostream>
#include <fstream>
using namespace std;
int const col = 10;
struct info {
    char name[255];
    int number;
    char start[255];
    char stop[255];
    int indebtedness;
    int credit;
}Info[col];
struct service {
    char service_name[255];
    int code;
    float rate;
    char time[255];
};
struct service_client {
    int number;
    int code;
    char date[255];
    char time[255];
};
 
void AddInfo() {
    ifstream in;
    in.open("info.txt");
    int stLength=0;
    while (!in.eof())
    {
        in >> Info[stLength].name;
        cout << "\n ФИО:\t" << Info[stLength].name;
        in >> Info[stLength].number;
        in >> Info[stLength].start;
        in >> Info[stLength].stop;
        in >> Info[stLength].indebtedness;
        in >> Info[stLength].credit;
        stLength++;
    }
    stLength--;
    in.close();
}
 
void ViewInfo() {
    for (int i = 0;i < col;i++) {
        cout << "\n ФИО:\t" << Info[i].name;
        cout << "\t Номер телефона:\t" << Info[i].number;
        cout << "\t Дата заключения договора:\t" << Info[i].start;
        cout << "\t Дата окончания договора:\t" << Info[i].stop;
        cout << "\t Размер задолженности:\t" << Info[i].indebtedness;
        cout << "\t Допустимый кредит:\t" << Info[i].credit << endl;
    }
 
}
int main() {
    setlocale(0, "");
    char choice;
    do {
        cout << "Меню \n";
        cout << "1.Добавить \n2.Показать\n3.Выход" << endl;
        cin >> choice;
        switch (choice) {
        case '1':
            AddInfo();
            break;
        case '2':
            ViewInfo();
            break;
        case '3':
            exit(0);
            break;
        }
 
 
    } while (choice != '3');
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2021, 21:48
Ответы с готовыми решениями:

Ввод через запятую
Программа от модератора Puporev’а. Обе программы работают, особенно вторая – с массивом. А вот к первой пожелание – как бы сделать...

Ввод в массив через запятую
Нужно ввести 5 переменных в массив через запятую, пример 1, 16, 21, 7, 11 Всем заранее благодарен за помощь

Ввод слова и чисел через запятую
Добрый день Помогите пожалуйста решить задачу. Мне нужно написать интерактивный калькулятор матриц. Я застрял в одном месте. ...

11
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.12.2021, 22:22
in читает до пробела поэтому нужно или определить больше полей в структуре (фамилия, имя, отчество и т.д.) или читать до разделителя запятая. какой способ подойдёт больше можно будет сказать, если напишите полное условие задачи

не применяйте eof при чтении с файла

также если пишите на языке С++ рекомендую перейти на строки string
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 12
19.12.2021, 22:25  [ТС]
Полное условие задачи звучит так: Имеется информация о клиентах телефонной компании и предоставляемых им услугах. Каждая услуга имеет собственный тариф, а каждый клиент может пользоваться произвольным набором услуг в течение ограниченного интервала времени (соответственно срокам договора). Имеются данные о фактическом использовании услуг.
Вся указанная информация представлена текстовыми файлами, структура которых выглядит следующим образом.
Файл информации о клиентах содержит фамилию, имя, отчество клиента, номер телефона, дату заключения договора, дату окончания договора, размер задолженности, допустимый кредит. Каждое поле отделяется запятой, запись – это строка текста. Пример содержимого в файле:

Иванов Иван Иванович, 9773672365, 12.10.2012, 12.10.2014,0,0
Петров Иван Васильевич, 9734672311, 22.01.2008, 01.11.2011,210,200
Васильев Илья Васильевич, 9714679805, 05.09.2010, 01.12.2012,0,2000

Файл информации об услугах состоит также из записей, состоящих из полей, разделенных запятыми. Каждая запись включает наименование услуги, ее код, тариф (в рублях), временной интервал измерения ( мин., сутки, месяц. Если временной привязки нет, ставится символ #). Пример данных в файле:

Cвязь внутри сети, 1, 0.30, мин
СМС, 2, 0.15, #
Cвязь с другими мобильными сетями, 3, 0.50, мин
Роуминг, 4, 10, мин
Международный тариф, 5, 50, мин

Файл информации об услугах, оказанных клиентам, включает в себя записи, состоящие из полей номера телефона, кода услуги, даты и времени ее использования в секундах. Знак # используется в случае, если время не определяется (например, отправляется СМС). Пример содержимого в файле:

9734672311, 1, 13.02.2008 13:01:55, 300
9734672311, 2, 28.11.2012 01:32:30, #
9757282392, 5, 23.09.2013 19:14:00, 54
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.12.2021, 22:28
St4rl1n3, это всё конечно очень интересно, но в чём собственно заключается задача ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
19.12.2021, 22:49
Цитата Сообщение от St4rl1n3 Посмотреть сообщение
при добавлении в структуру выдает ошибку:
На какой строке?

Цитата Сообщение от St4rl1n3 Посмотреть сообщение
while (!in.eof())
{
...
}
stLength--;
Очередная попытка компенсировать При считывании из файла последний элемент читается дважды

Почему в программе используется while (!in.eof())? Где вы такое видели?

Цитата Сообщение от St4rl1n3 Посмотреть сообщение
for (int i = 0;i < col;i++) {
Почему далее ведется работа с массивом до col, в то время как заполнено может быть меньше чем col данных?

Цитата Сообщение от St4rl1n3 Посмотреть сообщение
Каждое поле отделяется запятой
...
in >> Info[stLength].name;
Так а почему вы ожидаете, что этот способ чтения будет обращать внимание на запятые? Откуда он ввобще может что-то знать про запятые?
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 12
20.12.2021, 08:16  [ТС]
Задание состоит в разработке программы, которая считывает настроечные параметры и формирует отчет по имеющимся данным в файлах. Отчет записывается в текстовый файл. Число записей в каждом из описанных выше файлов произвольно.
Получить перечень услуг, предоставленных в текущем месяце, с суммарным значением в заданном диапазоне значений
Параметры: Минимальное значение и максимальное значение диапазона
0
111 / 74 / 39
Регистрация: 16.05.2020
Сообщений: 292
20.12.2021, 08:41
Покажите "образец" файла отчета. А решение на с++ принципиально? Явно БД просматривается ...
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 12
20.12.2021, 10:16  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а почему вы ожидаете, что этот способ чтения будет обращать внимание на запятые? Откуда он ввобще может что-то знать про запятые?
А как сделать чтобы он обращал внимание на запятые
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
На какой строке?
На 37Добавлено через 36 секунд
Добавлено через 16 минут
Цитата Сообщение от ivikis Посмотреть сообщение
Покажите "образец" файла отчета.
Ну мне надо сейчас просто понять как ввод реализовать, а отчет я уже позже сам сделаю
Цитата Сообщение от ivikis Посмотреть сообщение
А решение на с++ принципиально?
Да
0
111 / 74 / 39
Регистрация: 16.05.2020
Сообщений: 292
20.12.2021, 10:29
Цитата Сообщение от St4rl1n3 Посмотреть сообщение
позже
Думается, что это не логично ...
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.12.2021, 13:32
Цитата Сообщение от St4rl1n3 Посмотреть сообщение
как сделать чтобы он обращал внимание на запятые
C++
1
2
3
4
5
string word;
while (getline(in, word, ','))
{
    cout << word << "\n";
}
с таким условием задачи массив структур не нужен (и структура и не обязательна) - просто читаете данные и записываете нужные данные в новый файл
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 12
20.12.2021, 14:19  [ТС]
Все работает, но теперь вместо русских букв выводит непонятные символы
0
111 / 74 / 39
Регистрация: 16.05.2020
Сообщений: 292
20.12.2021, 21:36
Цитата Сообщение от St4rl1n3 Посмотреть сообщение
непонятные символы
info.txt - какая кодировка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.12.2021, 21:36
Помогаю со студенческими работами здесь

Ввод данных в структуру через указатель на структуру
#include &quot;stdafx.h&quot; #include &quot;ctime&quot; #include &quot;iostream&quot; #pragma warning(disable : 4996) using namespace std; class...

Ввод данных через запятую, заполнение массива
Сколько ищу, никак не могу найти. Как можно сделать так, чтобы при вводе чисел в консоль (!через запятую!) заполнялся массив из 8 значений...

Создать структуру "Данные о читателях" (файловый ввод/вывод)
подскажите как открыть файл в котором содержатся данные о читателях, чтобы потом работать с ним как со структурой

Написать структуру "Список книг" (бинарный файловый ввод/вывод)
Здравствуйте, Дорогие форумчане! Всех с наступающим. Задача: написать 2 консольных приложения: 1-ое осуществляет вывод списка...

sbcl, ALSA через ffi, и файловый ввод/вывод
Всем привет! Уже несколько часов ковыряюсь в гугле, никак не могу понять, как же лучше провернуть то что хочется. А хочется читать...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru