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

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

Войти
Регистрация
Восстановить пароль
 
VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
#1

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

03.11.2013, 17:00. Просмотров 411. Ответов 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".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 17:00     getline() (не получается считать информацию с файла)
Посмотрите здесь:

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

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

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

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

Как считать информацию с файла - C++
Помогите пожалуйста разобраться с файлами. При считывании из файла в методе void Users::LoadFile() (Файл Users.cpp) попадаю в бесконечный...

Как считать информацию с текстового файла? - C++
Нужна помощь! Мне необходимо создать пользовательскую функцию, которая будет считывать информацию с текстового файла.

Считать информацию из с файла массив посимвольно - C++
с++ как достать инфу с файла, и забить в массив по-символьно?

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

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

Как считать информацию из файла, если в конце стоит пробел? - C++
У меня при считывании из файла в массив, если в конце файла стоит пробел, то копируется ещё один символ (-842…..). Как определить, что в...

Считать информацию из одного файла, кодировать во второй и декодировать в третий - C++
Привет, как сделать чтобы программа работала с файлом. Т.е. брала информацию из одного, кодировала во второй и декодировала в третий? ...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
04.11.2013, 07:41     getline() (не получается считать информацию с файла) #2
VladislavTepes, проблема в том, что вы мешаете getline и перенаправление потока вывода. Когда вы пользуетесь перенаправлением, курсор не переходит на следующую строку, а отсаётся там же. Потом вы вызываете getline и ваша программа натыкается на '\n', соответственно вы получаете пустую строку.
VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
04.11.2013, 09:21  [ТС]     getline() (не получается считать информацию с файла) #3
anmartex, и как это обойти?
anmartex
...
1701 / 1194 / 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() (не получается считать информацию с файла)
Ответ Создать тему
Опции темы

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