Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
79 / 79 / 14
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
1

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

03.11.2013, 17:00. Показов 660. Ответов 3
Метки нет (Все метки)

Здравствуйте. У меня есть файл вида:
Код
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".
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2013, 17:00
Ответы с готовыми решениями:

Не получается считать из файла информацию
У меня есть текстовый файл. Мне нужно считать в нем строчки, такого типа: qwert 12345 asdfghjk...

Не получается считать информацию из файла в 2-х мерный массив (С++)
Что-то не совсем праильно работает, да и подскажите как потом поменять местами столбики со строками...

Не получается второй раз считать информацию из БД
Доброго времени суток. Столкнулся с такой проблемой. Имеется база данных в ней две таблицы...

Не получается чтение из текстового файла (getline)
Пытаюсь прочитать данные из текстового файла: using namespace std; ifstream f;...

3
...
1802 / 1267 / 934
Регистрация: 12.02.2013
Сообщений: 2,058
04.11.2013, 07:41 2
VladislavTepes, проблема в том, что вы мешаете getline и перенаправление потока вывода. Когда вы пользуетесь перенаправлением, курсор не переходит на следующую строку, а отсаётся там же. Потом вы вызываете getline и ваша программа натыкается на '\n', соответственно вы получаете пустую строку.
0
79 / 79 / 14
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
04.11.2013, 09:21  [ТС] 3
anmartex, и как это обойти?
0
...
1802 / 1267 / 934
Регистрация: 12.02.2013
Сообщений: 2,058
04.11.2013, 10:07 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.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2013, 10:07

Задание по Visual c++ 2013, Нужно создать файл, записать в него информацию, а затем по другой кнопке считать информацию из файла
Вот код записи в файл: { UpdateData(TRUE); F.open(L&quot;dat1.txt&quot;, std::ios::out); // F -...

Не получается считать информацию из фаила (описать структуру с именем MARSH)
Не получается считать информацию из файла. Все остальные действия программы кроме считывания...

С помощью cin.getline считать все строки файла в контейнер (вектор или очередь)
Можете пожалуйсто написать код, где можно с помощью cin.getline считать все строки файла в...

Считать информацию из файла
void load_file (queue *q) { char path; int count=0; system(&quot;cls&quot;); printf...


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

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

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