IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Манипуляторы С++
сообщение
Сообщение #1


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


Пытаюсь разобраться с манипуляторами на примере этой задачи

1. Написать программу - посчитать длину окружности. Входные данные поступают с
клавиатуры. Установить ширину поля 10 символов, установить точность 4 цифры,
заполнить вместо пробелов символом / с помощью функций и
манипуляторов.Предусмотреть обработку ошибок. Результат выводится на экран в
десятичной, шестнадцатеричной и восьмеричной системе.
2. Проверить какие флаги потока вывода установлены и заменить попарно на
десятичные на шестнадцатиричные (и наоборот) левое выравнивание на правое
выравнивание (и наоборот) Проверить результат. Добавить в программу два своих
манипулятора. Один выводит сообщение, другой устанавливает
шестнадцатеричный вывод и символ заполнения $.


# include <iostream.h>
# include <iomanip.h>
const float pi=3.14;

int main() {
float l;
float r;

// number ONE
cout.width(10);
cout.precision(4);
cout.fill('/');
cout << "radius pls";;
// for (float r=0; cin.rdstate != '_good'; ++i);
cin >> r;
if (cin.rdstate != "_good") {
cout << " Input Error"
}
l=2*pi*r;
cout << "leghth of circle is";
cout << dec << l << /n;
cout << oct << l << /n;
cout << hex << l << endl;

// NUMBER TWO

long fl;
fl= cout.flags();
cout << "Now flag position: "<< fl<<"\n";

ostream& privet(ostream &stream)
{
stream << 'privet';
return stream;
}

ostream& hexdollar(ostream &stream)
{
stream.setf(ios::hex);
stream << fill('$');
return stream;
}

cout << privet << /n;
cout << hexdollar << 17 << endl;
return 0;
}


Помогите исправить


--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Программа 2, выравнивание по правому краю не происходит, почему?
Вот так тоже не работает?
#include <iostream> // не *.H-файл
#include <iomanip>
using namespace std;

ostream& privet(ostream &stream)
{
stream << "privet";
return stream;
}

ostream& hexdollar(ostream &stream)
{
stream.setf(ios::hex);
stream.fill('$');
return stream;
}


int main() {
long fl;
cout.setf(ios_base::right | ios_base::dec);
cout << setw(15) << privet << endl; // Проверка выравнивания вправо
fl = cout.flags();

cout << "Now flag position: "<< fl<<"\n";
if (fl == 20){ // Здесь - сравнение, а не присваивание !!!
cout.unsetf(ios_base::right | ios_base::dec);
cout.setf(ios_base::left | ios_base::hex);
}
fl = cout.flags();
cout << "Now flag position: "<< fl<<"\n";
cout << privet << "\n";
cout << hexdollar << 17 << endl;

return 0;
}
Не надо пользоваться безликими числами. Гораздо удобнее использовать именованные константы и перечисления.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


Цитата(volvo @ 16.01.2009 16:47) *


#include <iostream> // не *.H-файл ххххххххххххххххПОЧЕМУ?
#include <iomanip>
using namespace std; ххххххххххххххххххххх это зачем?

ostream& privet(ostream &stream)
{
stream << "privet";
return stream;
}

ostream& hexdollar(ostream &stream)
{
stream.setf(ios::hex);
stream.fill('$');
return stream;
}
int main() {
long fl;
cout.setf(ios_base::right | ios_base::dec);
cout << setw(15) << privet << endl; // Проверка выравнивания вправо
fl = cout.flags();

cout << "Now flag position: "<< fl<<"\n";
if (fl == 20){ // Здесь - сравнение, а не присваивание !!! xxxxD
cout.unsetf(ios_base::right | ios_base::dec);
cout.setf(ios_base::left | ios_base::hex);
}
fl = cout.flags();
cout << "Now flag position: "<< fl<<"\n";
cout << privet << "\n";
cout << hexdollar << 17 << endl;

return 0;
}

Гораздо удобнее использовать именованные константы и перечисления.

Не знал что так можно
Почему не Н


--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(ammaximus @ 18.01.2009 17:18) *
не *.H-файл ххххххххххххххххПОЧЕМУ?
Потому что использование H-файлов в настоящее время является deprecated (не рекомендованным) Стандартом С++. Тому есть много причин:
1) в один прекрасный момент H-версии файлов могут просто исчезнуть, и перестать поддерживаться;
2) содержимое <iostream.h> поддерживает работу с простыми символами (char), а содержимое <iostream> кроме этого поддерживает еще и работу с Юникодом (wchar_t);
3) интерфейс <iostream.h> уже достаточно долгое время не изменяется, а <iostream> изменяется в ходе развития С++ и его библиотек (STL)
4) классы, описанные в <iostream.h> входят в глобальное пространство имен, а классы, описанные в <iostream> - в пространство имен std, что позволяет избежать конфликтов при использовании одинаковых имен.

Цитата(ammaximus @ 18.01.2009 17:18) *
ххххххххххххххххххххх это зачем?
Затем, что см. пункт 4) выше, и затем, чтобы не писАть:

std::cout.setf(std::ios_base::right | std::ios_base::dec);
std::cout << std::setw(15) << privet << std::endl; // Проверка выравнивания вправо

, а сразу сказать компилятору, что ты будешь использовать именно пространство имен std...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.05.2024 0:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name