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

Не работает поток - C++

Восстановить пароль Регистрация
 
Guy Kawasaki
 Аватар для Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42
04.12.2013, 18:07     Не работает поток #1
Всем доброго времени суток. Ниже представлен код программы, считывающей инф. о пользователе с файла.
Проблема: После считывания идентификатора и превращения его в int, наш поток отказывается считывать и превращать в int file_num_friends.
Что было сделано для решения проблемы: Пытался использовать Сишную функцию atoi и функцию 11-го стандарта stoi (потерпел фиаско).
Среда разработки: Code::Blocks 12.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
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
#include "myskype.h"
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
 
using namespace std;
 
void show_user_list(User *arr, int size)
{
    cout << "All members of our network:\n";
    for(int i = 0; i < size; ++i)
    {
        cout << "Id:" << arr[i].get_id() << " ";
        cout << "Nickname:" << arr[i].get_nick() << " ";
        cout << "Password:" << arr[i].get_pasw() << " ";
        cout << "Email:" << arr[i].get_mail() << " ";
        cout << "Friends:" << arr[i].get_friend_number() << " ";
        cout << "Ban:" << arr[i].get_ban_number() << endl;
    }
}
 
int main()
{
    User *network;
    network = new User[3];
 
    string line;
    int file_id;
    int file_num_frd;
    int file_num_ban;
    string file_nick;
    string file_pasw;
    string file_mail;
 
    ifstream userfile("user.txt");
    if (userfile.is_open())
    {
        for(int i = 0; i < 5; ++i)
        {
            getline(userfile, line);
            istringstream ist(line);
            ist >> file_id;
            ist.clear();
///////////////////
            getline(userfile, line);
             istringstream ist1(line);
            //ist.str(line);
        ist1 >> file_num_frd;
           // ist.clear();
 
            getline(userfile, line);
            //ist.str(line);
             istringstream ist2(line);
            ist2 >> file_num_ban;
            //ist.clear();
//////////////////////////
            getline(userfile, line);
            file_nick = line;
 
            getline(userfile, line);
            file_pasw = line;
 
            getline(userfile, line);
            file_mail = line;
 
            network[i].put_id(file_id);
            network[i].put_nick(file_nick);
            network[i].put_pasw(file_pasw);
            network[i].put_mail(file_mail);
            network[i].put_friend_number(file_num_frd);
            network[i].put_ban_number(file_num_ban);
        }
        userfile.close();
    }
    else cout << "Unable to open file!" << endl;
 
    show_user_list(network, 3);
 
    return 0;
}
Компилится, НО вылетает при запуске.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 18:07     Не работает поток
Посмотрите здесь:

C++ Данные в поток
Поток. C++
поток C++
STL. Не работает вывод через << в поток когда использую итераторы :( C++
Поток C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 18:46     Не работает поток #2
Зачем для чтения чисел использовать getline?
Guy Kawasaki
 Аватар для Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42
04.12.2013, 20:06  [ТС]     Не работает поток #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем для чтения чисел использовать getline?
Мой файл организован следующим образом:'
2
2
1
John_Coffey
12_abc
fletcher@hotmail.com
3
2
1
Bobby_Fischer
1_Ab0fish
r.fischer@tempinbox.com

и т.д.

То есть данные хранятся вперемешку. Первые три я считываю функцией getline в строку line, и если мне требуется, то передаю эту строку потоку istringstream, а если хочу оставить типа string, то все. Id, Число друзей и число забаненых пользователей должно быть типа int, а все остальное, естественно, string.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 20:20     Не работает поток #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем для чтения чисел использовать getline?
Вот так первые три числа считаются:
C++
1
(userfile >> file_id >> file_num_frd >> file_num_ban).get();
Дальше, для чтения строк, можно getline() использовать.
Guy Kawasaki
 Аватар для Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42
04.12.2013, 20:24  [ТС]     Не работает поток #5
Большое спасибо.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 20:37     Не работает поток #6
У вас в файле фиксированное количество строк с данными - 30 (5 х 6)?
Guy Kawasaki
 Аватар для Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42
04.12.2013, 20:41  [ТС]     Не работает поток #7
Да нет, думаю поменьше будет. Это пробный вариант. Три пользователя, и у каждого по 2-3 друга и по 0-1 забаненому пользователю. А что?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 20:46     Не работает поток #8
Цитата Сообщение от Guy Kawasaki Посмотреть сообщение
А что?
Если неизвестно количество данных в файле, то чтение из файла по другому делается: чтение в цикле до конца файла.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 20:50     Не работает поток
Еще ссылки по теме:

C++ Поток
Скопировать поток и добавить ошибки в поток C++
C++ Скопировать поток в поток

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

Или воспользуйтесь поиском по форуму:
Guy Kawasaki
 Аватар для Guy Kawasaki
2 / 1 / 0
Регистрация: 07.11.2013
Сообщений: 42
04.12.2013, 20:50  [ТС]     Не работает поток #9
Еще раз большое спасибо. Это я упустил из вида.
Yandex
Объявления
04.12.2013, 20:50     Не работает поток
Ответ Создать тему
Опции темы

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