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

getline() (не получается считать информацию с файла) - C++

Восстановить пароль Регистрация
 
VladislavTepes
 Аватар для VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
03.11.2013, 17:00     getline() (не получается считать информацию с файла) #1
Здравствуйте. У меня есть файл вида:
Код
volleyball
1
sports.ru
500
volleyball football
Первая строка - искомый тег, вторая - количество сайтов. Задача в том, чтобы вывести имя самого популярного сайта с нужным тегом.
Начиная с третьей строки, записи в таком порядке: имя сайта, популярность и список тегов. Пытаюсь считать эту информацию из файла и вывести в консоль, но что-то ничего не получается:
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
#include <iostream>
#include <fstream>
#include <vector>
struct SSite
{
  std::string name, tags;
  unsigned long rate;
};
int main()
{
    std::ifstream reader("sites.txt");
    std::string tag_string;
    unsigned short amount;
    if (!reader.good()) { std::cout<<"An error occured"<<std::endl; }
    else
    {
        getline(reader, tag_string);
        reader>>amount;
        std::cout<<amount<<" sites\n"<<"Find \""<<tag_string<<"\" tag(s)"<<std::endl;
        std::vector<SSite> sites(amount);
        for (int i=0; i<amount && !reader.eof(); i++)
        {
            getline(reader, sites[i].name);
            std::cout<<"Name: "<<sites[i].name;
            reader>>sites[i].rate;
            std::cout<<" Rate: "<<sites[i].rate;
            getline(reader, sites[i].tags);
            std::cout<<" Tags: "<<sites[i].tags;
        }
 
 
 
 
    }
    reader.close();
 
    return 0;
}
Выводитс просто "Name: Rate: Tags: 0".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 17:00     getline() (не получается считать информацию с файла)
Посмотрите здесь:

C++ Не получается считать информацию из файла в 2-х мерный массив (С++)
С помощью cin.getline считать все строки файла в контейнер (вектор или очередь) C++
C++ Как побайтно считать информацию из исполняемого файла
Не получается считать информацию из фаила (описать структуру с именем MARSH) C++
Как считать информацию с файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
04.11.2013, 07:41     getline() (не получается считать информацию с файла) #2
VladislavTepes, проблема в том, что вы мешаете getline и перенаправление потока вывода. Когда вы пользуетесь перенаправлением, курсор не переходит на следующую строку, а отсаётся там же. Потом вы вызываете getline и ваша программа натыкается на '\n', соответственно вы получаете пустую строку.
VladislavTepes
 Аватар для VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
04.11.2013, 09:21  [ТС]     getline() (не получается считать информацию с файла) #3
anmartex, и как это обойти?
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
04.11.2013, 10:07     getline() (не получается считать информацию с файла) #4
Цитата Сообщение от VladislavTepes Посмотреть сообщение
anmartex, и как это обойти?
Ну если не брезгуете использовать C-ишные функции, то можно что-то на подобии:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
 
struct SSite
{
    std::string name, tags;
    unsigned long rate;
};
int main()
{
    std::ifstream reader("sites.txt");
    std::string tag_string;
    std::string buff;
    unsigned short amount;
 
    if (!reader.good())
    {
        std::cout << "An error occured" << std::endl;
    }
    else
    {
        getline(reader, tag_string);
        getline(reader, buff);
        amount = atoi(buff.c_str());
        std::cout << amount << " sites\n" << "Find \"" << tag_string << "\" tag(s)" << std::endl;
        std::vector<SSite> sites(amount);
        for (int i = 0; i < amount && !reader.eof(); i++)
        {
            getline(reader, sites[i].name);
            std::cout << "Name: " << sites[i].name;
            getline(reader, buff);
            sites[i].rate = atoi(buff.c_str());
            std::cout << " Rate: " << sites[i].rate;
            getline(reader, sites[i].tags);
            std::cout << " Tags: " << sites[i].tags;
        }
    }
    reader.close();
 
    return 0;
}
Если же религия не позволяет, то ройте в сторону stringstream.
Yandex
Объявления
04.11.2013, 10:07     getline() (не получается считать информацию с файла)
Ответ Создать тему
Опции темы

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