Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2013, 23:49   #1
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию Изменяется значение при использовании манипуляторов

Добрый день. Написал перегруженный оператор вывода в поток. Проблема в том, что если num будет начинаться с нулей, то они просто не появятся на экране. Для решения этой проблемы изменил ширину поля и использовал 0 как заполнитель. Проблема в том, что на выходе получаю не 0013, а 0011. Причем если первые нули заменить например на единицы, то на выходе получаю правильное число. В чем может быть проблема?

#
Код:
pragma warning(disable:4996)
#include <iostream>
#include <iomanip>
 
using namespace std;
 
class Phonebook
{
private:
    char name[64];
    int areacode;
    int prefix;
    int num;
public:
    Phonebook(char *n, int a, int p, int nm) { 
        strcpy(name, n); 
        areacode = a; 
        prefix = p; 
        num = nm; 
    }
    friend ostream &operator<<(ostream &, Phonebook &); 
};
 
ostream &operator<<(ostream &stream, Phonebook &obj)
{
    stream << obj.name << " ";
    stream << "(" << obj.areacode << ") ";
    stream << obj.prefix << "-";
    stream.width(4); //ширина поля = 4
    stream.fill('0'); // для вывода незначащих нулей
    stream << obj.num;
    return stream;
}
 
int main()
{
    Phonebook a("Taddy", 111, 555, 1113);
    cout << a << endl;
    system("pause");
    return 0;
}
Dima-War вне форума Ответить с цитированием
Старый 05.12.2013, 00:20   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

"С++ - 1000 и 1 способ выстрелить себе в ногу" ©

Что-то подобное и предполагал:
Цитата:
To specify an octal constant, begin the specification with 0, followed by a sequence of digits in the range 0 through 7. The digits 8 and 9 are errors in specifying an octal constant. For example:
Copy to ClipboardPrint

int i = 0377; // Octal constant
int j = 0397; // Error: 9 is not an octal digit

Последний раз редактировалось Smogg; 05.12.2013 в 00:27.
Smogg вне форума Ответить с цитированием
Старый 05.12.2013, 06:54   #3
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Хмм.. И как можно это исправить? Написал вот так, но особого результата не дало..

Код:
stream << setw(4) << setfill('0') << hex << obj.num;
Dima-War вне форума Ответить с цитированием
Старый 05.12.2013, 07:16   #4
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Dima-War Посмотреть сообщение
Хмм.. И как можно это исправить? Написал вот так, но особого результата не дало..

Код:
stream << setw(4) << setfill('0') << hex << obj.num;
Манипуляторы тебе не помогут.
Не задавай в явном виде числа с нулем в начале. А если задаешь, то учитывай, что задаешь их в восьмеричном формате.

Простой пример:
Код:
Phonebook a("Taddy", 111, 555, 1113);
Компилятор сохраняет в памяти последний аргумент как число, которое равно 1*1000 + 1*100 + 1*10 + 3;
Код:
Phonebook a("Taddy", 111, 555, 01113);
Компилятор сохраняет в памяти последний аргумент как число, которое равно 1*512 + 1*64 + 1*8 + 3;

Последний раз редактировалось nikmoon; 05.12.2013 в 07:21.
nikmoon вне форума Ответить с цитированием
Старый 05.12.2013, 12:09   #5
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Ясно, спасибо.
Dima-War вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не изменяется значение поля! Swatch JavaScript, Ajax 10 14.11.2013 14:26
C++|покажите где изменяется значение указателя Arantir# Помощь студентам 2 24.09.2013 13:19
C#. значение параметра не изменяется THRASHER C# (си шарп) 5 12.10.2010 17:16
в массиве последнее значение само меняется при использовании оператор printf Petruha-nsk Общие вопросы C/C++ 2 19.09.2010 12:45
Почему при открывании БД изменяется порядок записей Oooleg Microsoft Office Access 4 28.02.2010 00:02