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

Неправильная работа программы по учебнику Дейтелов - C++

Восстановить пароль Регистрация
 
RamonN
 Аватар для RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
06.12.2013, 14:27     Неправильная работа программы по учебнику Дейтелов #1
Всем доброго времени суток.
Изучаю книгу Дейтелов "Как программировать на С/С++" , попутно выполняя написанные там программы
Возникла ошибка
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
#include <iostream>
 
class PhoneNumber
{
    friend std::ostream &operator<<(std::ostream &, const PhoneNumber&);
    friend std::istream &operator>>(std::istream &, PhoneNumber&);
private:
    char areaCode[4];
    char exchange[4];
    char line[5];
};
 
std::ostream &operator<<(std::ostream &output, const PhoneNumber &num)
{
    output << "(" << num.areaCode << ") "
        << num.exchange << "-" << num.line;
    return output;
}
 
std::istream &operator>>(std::istream &input, PhoneNumber &num)
{
    input.ignore();
    input.getline(num.areaCode, 4);
    input.ignore(2);
    input.getline(num.exchange, 4);
    input.ignore();
    input.getline(num.line, 5);
 
    return input;
}
 
int main()
{
    PhoneNumber phone;
 
    std::cout << "Enter a phone number in the "
        << "form (123) 456-7890:\n";
    std::cin >> phone;
 
    std::cout << "The phone number entered was:\n"
        << phone << std::endl;
 
    system("pause");
    return 0;
}
Функция getline при переопределении оператора >> считывает только в первый элемент areaCode класса num, а остальные просто пустые строки.
Как сделать, чтобы считывал во все элементы класса?
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 14:27     Неправильная работа программы по учебнику Дейтелов
Посмотрите здесь:

Неправильная работа с файлами C++
C++ Строковые С++,неправильная работа функции
Неправильная работа с русскими символами C++
Неправильная работа программы C++
Условие цикла Иф,неправильная работа иф C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.12.2013, 16:10     Неправильная работа программы по учебнику Дейтелов #2
Зачем здесь getline() использовать? getline() будет считывать всю введённую строку, но так как она длиннее 3-х символов (4 - 1), то, после первого чтения, установится флаг ошибки и поток станет нерабочим.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
06.12.2013, 16:13     Неправильная работа программы по учебнику Дейтелов #3
У вас формат телефонного номера не совпадает с тем, который в cout ( (123) 456-7890 - такой формат работать не будет)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.12.2013, 16:18     Неправильная работа программы по учебнику Дейтелов #4
Используйте get(), с такими же параметрами.
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::istream &operator>>(std::istream &input, PhoneNumber &num)
{
    input.ignore();
    input.get(num.areaCode, 4);
    input.ignore(2);
    input.get(num.exchange, 4);
    input.ignore();
    input.get(num.line, 5);
    input.ignore();
    
    return input;
}
Миниатюры
Неправильная работа программы по учебнику Дейтелов  
RamonN
 Аватар для RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
06.12.2013, 16:54  [ТС]     Неправильная работа программы по учебнику Дейтелов #5
alsav22, Спасибо большое, помогло, getline использовал, т.к. в книге был приведен пример именно с ней
alsav22
06.12.2013, 17:03
  #6

Не по теме:

Цитата Сообщение от RamonN Посмотреть сообщение
т.к. в книге был приведен пример именно с ней
Страницу в книге можно узнать?

RamonN
 Аватар для RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
06.12.2013, 17:34  [ТС]     Неправильная работа программы по учебнику Дейтелов #7
alsav22, Глава 18.5, 763 стр.
alsav22
06.12.2013, 17:48
  #8

Не по теме:

А издание какое? Год?

ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.12.2013, 17:54     Неправильная работа программы по учебнику Дейтелов #9
alsav22 прав, считай просто всю строку, а потом ее разбери!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2013, 18:25     Неправильная работа программы по учебнику Дейтелов
Еще ссылки по теме:

Неправильная работа цикла C++
C++ Неправильная работа деструктора

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

Или воспользуйтесь поиском по форуму:
RamonN
06.12.2013, 18:25  [ТС]     Неправильная работа программы по учебнику Дейтелов
  #10

Не по теме:

alsav22, Издание и год не скажу, т.к. книга без титульника и вообще каких-либо опоновательных знаков Но она уже давненько у меня пылится, так что думаю не самое новое издание

Yandex
Объявления
06.12.2013, 18:25     Неправильная работа программы по учебнику Дейтелов
Ответ Создать тему
Опции темы

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