63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
1

Не считывается строка из строки

10.09.2014, 07:22. Показов 446. Ответов 3
Метки нет (Все метки)

недавно делал класс тут в соседней теме, сегодня случайно заметил ошибку, а уже хотел сдавать, помогите пожалуйста короче в строке 66 никак не хочет читать из строки название города в name, в name все время оказывается пустая строка

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <fstream>
 
using namespace std;
 
class town //Класс «Населенный пункт»
{
private:
    char name[100]; //название
    char* getname() { return name; }
    double latitude; //широта
    double longitude; //долгота
    char transport[10][100]; //виды общественного транспорта
    size_t transport_count; //количество видов общественного транспорта
public:
    //конструктор без параметров
    town()
    {
        strcpy(name, "");
        population = 0;
        latitude = 0.0;
        longitude = 0.0;
        transport_count = 0;
    }
    //конструктор с параметром задающим название
    town(char _name[100])
    {
        strcpy(name, _name);
        population = 0;
        latitude = 0.0;
        longitude = 0.0;
        transport_count = 0;
    }
    //конструктор с параметрами задающими все поля
    town(char _name[100], size_t _population, double _latitude, double _longitude, char _transport[10][100], size_t _transport_count)
    {
        strcpy(name, _name);
        population = _population;
        latitude = _latitude;
        longitude = _longitude;
        transport_count = _transport_count;
        for (int i = 0; i < transport_count; i++)
            strcpy(transport[i], _transport[i]);
    }
    //деструктор
    ~town()
    {
        strcpy(name, "");
        population = 0;
        latitude = 0.0;
        longitude = 0.0;
    }
    //метод Input выполняет ввод данных из файла
    bool Input()
    {
        char filename[100]; //имя файла
        char tmp[100] = "input\\", str[100];
        cout << "filename: "; //запрос имени файла
        cin >> filename; //чтение имени файла из потока
        strcat(tmp, filename); //добавление папки в которой лежит файл
        ifstream stream(tmp); //открытие потока
        if (!stream.is_open()) return false; //если поток не открылся выход
 
        //читаю название
        stream.getline(str, 100);
        sscanf(str, "name=%s", name);
 
        //читаю население
        stream.getline(str, 100);
        sscanf(str, "population=%d", &population);
 
        //читаю широту
        stream.getline(str, 100);
        sscanf(str, "latitude=%lf", &latitude);
 
        //читаю долготу
        stream.getline(str, 100);
        sscanf(str, "longitude=%lf", &longitude);
 
        //читаю виды транспорта
        stream.getline(str, 100);
        sscanf(str, "transport=%s", tmp);
        memset(str, 0, 100);
        strcpy(str, tmp);
        char* _tmp = str;
        while (char* pos = strchr(_tmp, ','))
        {
            size_t index = 0;
            memset(tmp, 0, 100);
            for (; _tmp < pos; _tmp++)
                tmp[index++] = (*_tmp);
            strcpy(transport[transport_count++], tmp);
            memset(tmp, 0, 100);
            _tmp = pos + 1;
        }
        if (*_tmp)
        {
            size_t index = 0;
            memset(tmp, 0, 100);
            for (; _tmp < strchr(str, 0); _tmp++)
                tmp[index++] = (*_tmp);
            strcpy(transport[transport_count++], tmp);
        }
    }
    //метод Output печатает на экране данные класса
    bool Output()
    {
        system("cls");
        cout << "name=" << name << "\n";
        cout << "population=" << population << "\n";
        cout << "latitude=" << latitude << "\n";
        cout << "longitude=" << longitude << "\n";
        cout << "transport=";
        for (int i = 0; i < transport_count; i++)
        {
            if (i < transport_count - 1)
                cout << transport[i] << ",";
            else
                cout << transport[i];
        }
        cout << "\n\n";
        return true;
    }
protected:
    size_t population; //количество жителей
    size_t getpopulation() { return population; }
};
 
int main()
{
    setlocale(LC_ALL, "RUSSIAN");
    town t[3];
    for (auto i : t)
    {
        i.Input();
        i.Output();
    }
    return cin.get();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2014, 07:22
Ответы с готовыми решениями:

Не считывается строка из файла
Есть динамический массив символов (поле класса). При считывании из файла выдаёт ошибку &quot;CXX0030:...

Первая строка считывается пустой
Программа должна считать определенное количество имен студентов в массив строк и потом вывести...

Из файла правильно считывается только первая строка
Прога должна считать из файла строку в str (включая пробелы), после чего перезаписать в zone и...

После чтения числа считывается пустая строка
Нужно считать ряд строк, что-то вроде такого вида: аааа бббб сссс и я попробовал реализовать...

3
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.09.2014, 07:42 2
Посмотри отладчиком, что находится в строке str после отработки 65 строки.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
10.09.2014, 08:51  [ТС] 3
Цитата Сообщение от BRcr Посмотреть сообщение
Посмотри отладчиком, что находится в строке str после отработки 65 строки.
смотрел, все там правильно будет "name=Москва"

Добавлено через 1 час 4 минуты
ааа все понял у меня там формат файла был "town=...", а я пытался читать "name=..."
0
4033 / 2323 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.09.2014, 14:54 4
Буря в стакане получилась.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2014, 14:54

Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается?
Цель программы: При вводе строки, подсчитывает количество гласных букв. Проблема: При вводе...

Не считывается символ конца строки
Доброго времени суток. У меня проблема в том, что дан файл f.txt, там написан текст в несколько...

Считывается только первое слово из строки
Считываю строки из файла. Почему-то считывается только первое слово из строки. Помогите while (a...

Аргументы N2 командной строки посимвольно не считывается.
Вот, всё предельно просто. Действительно, имеем такую программу #include &lt;stdio.h&gt; int main...


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

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

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