C++: cout

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

Сообщение x0r » Вт май 06, 2003 3:31 pm

Доброе время суток!

Нужно задать число символов после запятой в функции вывода cout.
Единственное уточнение: не надо предлагать альтернативные варианты вывода, типа, через printf.
Оно через printf работает и без каких-либо накладок, но интересует возможность задать это именно через использование cout.

Заранее спасибо.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение ssm » Вт май 06, 2003 5:07 pm

#include <iostream>

int main(){
using namespace std;

//установим количество знаков после запятой
cout.precision(2);

//фиксированный формат - без экспоненты
cout.setf(ios::fixed) ;

//потестим
cout << 222.2222 << ' ' << 2.3332 << ' '<< 2323 << endl;

return 0;
}
матюкаться - плохо
ssm
Старшина
 
Сообщений: 46
Зарегистрирован: Ср апр 23, 2003 4:49 pm
Откуда: гоновер, германия
Пункты репутации: 0

Сообщение x0r » Ср май 07, 2003 1:39 pm

Огромное спасибо!!! А можно подробнее прокомментировать все строки в самой функции или указать источник, где с этим можно разобраться? Спасибо.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение ssm » Чт май 08, 2003 12:04 pm

Если хочешь почитать - Страуструпа читай(тока несколько раз, этот плут между строк имеет свойство писать много важного и вкусного)

int main(){

//так как cout, ios, endl определены в пространстве
//имен std, и чтобы каждый раз не писать алиас намспэйса
//перед функциями, объектами и т.д. даем функции
//main "увидеть" все из std
using namespace std;

//установим количество знаков после запятой
//что непонятного? cout - просто статический объект,
//определенный(видимый) в iostream
cout.precision(2);

//фиксированный формат - без экспоненты
//почитай о cout.setf(например в MSDN,
//если Страуса нет), там приводится набор флагов
cout.setf(ios::fixed) ;

//выводим три числа для теста, разделенные
//пробелом, в конце - перевод каретки
cout << 222.2222 << ' ' << 2.3332 << ' '<< 2323 << endl;

//все, выходим с результатом 0
return 0;
}
матюкаться - плохо
ssm
Старшина
 
Сообщений: 46
Зарегистрирован: Ср апр 23, 2003 4:49 pm
Откуда: гоновер, германия
Пункты репутации: 0

Сообщение x0r » Пт май 09, 2003 1:54 am

Огромное спасибо. У меня уже другая интересная штука: если я правильно догадался, то таким способом будут выводиться знаки после запятой, если они есть вообще? Просто я попробовал вывести так, как написано у тебя, а потом у себя, сначала в отдельной проге - работает, а потом в своей - не работает, потом задал ей на вход вещественные значения - надо же - заработало. Получается, что если часть с плавающей точке нулевая, то он ее не выводит?
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение Lynn » Сб май 10, 2003 7:40 am

Нет. Просто целые числа (int, long int) и числа с плавающей точкой (double) это разные типы данных, а precision управляет количеством цифр после запятой именно для чисел с плавающей точкой.
Where were you while we were getting high? — Oasis, Champagne Supernova
Lynn
Капитан
 
Сообщений: 267
Зарегистрирован: Пн апр 07, 2003 1:09 pm
Откуда: Москва
Пункты репутации: 0

Сообщение x0r » Вс май 11, 2003 3:20 am

Так и не понял. У меня вроде все в порядке, но тем не менее - не работает. Не работает при тех значениях, когда у меня часть после плавающей точки нулевая, а когда я ввожу всякую ерунду после запятой, то у меня все работает. Где баг или непонимание функционирования? Может быть вы посмотрите исходник, если не трудно?
<a href='http://xor.wz.cz/files/SourceC.zip' target='_blank'>http://xor.wz.cz/files/SourceC.zip</a>

Если посмотрите, то можно еще комментарии по поводу использования отдельных модулей в программах, хотя бы несколько слов?

Заранее спасибо.
Последний раз редактировалось x0r Вс май 11, 2003 5:35 am, всего редактировалось 1 раз.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение Lynn » Пн май 12, 2003 9:54 am

А где там эта строчка?
cout.setf(ios::fixed) ;
Where were you while we were getting high? — Oasis, Champagne Supernova
Lynn
Капитан
 
Сообщений: 267
Зарегистрирован: Пн апр 07, 2003 1:09 pm
Откуда: Москва
Пункты репутации: 0

Сообщение ssm » Пн май 12, 2003 2:53 pm

Да у него там просто компилер допотопный(BCC 3.1). IMHO там такого просто нет <!--emo&:)-->Изображение<!--endemo-->)
матюкаться - плохо
ssm
Старшина
 
Сообщений: 46
Зарегистрирован: Ср апр 23, 2003 4:49 pm
Откуда: гоновер, германия
Пункты репутации: 0

Сообщение x0r » Вт май 13, 2003 8:37 am

Ну, допотопный - не допотопный, какой есть. На сегодняшний день мне больше и не надо. Такого компилятора вполне хватает для того, чтобы заниматься программированием дома, решать задачи, сдавать лабораторные работы в универе. Просто я разбираюсь с языком практически самостоятельно - нам на практике вообще ни слова не говорят, а раньше с языками программирования я практически не работал.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение ssm » Вт май 13, 2003 1:54 pm

BCC 3.1 далеко уже не язык C++
язык C++ имеет свой стандарт, под который BCC 3.1 давно уже неподпадпет. Это скорее С с классами

ЗЫЫ а вопрос был о C++
матюкаться - плохо
ssm
Старшина
 
Сообщений: 46
Зарегистрирован: Ср апр 23, 2003 4:49 pm
Откуда: гоновер, германия
Пункты репутации: 0

Сообщение x0r » Ср май 14, 2003 5:17 pm

Это уже не в кучу. Я пытаюсь понять, почему при подаче на вход чисел со знаками после запятой у меня выводится все корректно, а при целых числах на входе дробная, хоть и нулевая, часть не выводится вообще. Какое отношение к этому имеет классификация BCC++ 3.1?
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение ssm » Чт май 15, 2003 10:09 am

а как ты хочешь? я так до конца и непонял :-(

вход:
0.2222 32.332323 32 3

выход:
0.22 32.33 32.00 3.00

???
матюкаться - плохо
ssm
Старшина
 
Сообщений: 46
Зарегистрирован: Ср апр 23, 2003 4:49 pm
Откуда: гоновер, германия
Пункты репутации: 0

Сообщение x0r » Пт май 16, 2003 6:07 pm

Ты все правильно понял. Если написать так, как ты пишешь, то все нормально, но если ввести:
1 0
-7 0
12 0
то эта зараза выдаст что-то в духе (3,4)
(1,0)x^2+(-7,0)^x+(12,0)=0
Когда нужно:
(1.000,0.000)X^2+(-7.000,0.000)X+(12.000,0.000)=0
и корни вида:
x1 = (3.000,0.000)
x2 = (4.000,0.000)

Я такого вида пытаюсь добиться. Хотя мне уже не раз сказали, что вывод через консоль неудобен и часто непрактичен. Посмотрим, я просто хочу сам для себя решить, что мне удобнее и понятнее. Вот.
x0r
Ст. лейтенант
 
Сообщений: 132
Зарегистрирован: Вс мар 09, 2003 11:11 am
Откуда: Россия, Челябинск.
Пункты репутации: 0

Сообщение ssm » Пн май 19, 2003 6:42 am

2x0r

Эх молодежь...

#include<iostream>

using namespace std;

int main(int argc, char* argv[]){
const double dv[] = {1, 2, 0, 3.44};

cout.setf(ios::fixed | ios::showpoint);
cout.precision(3);

for (int i = 0; i < (sizeof(dv) / sizeof(dv[0])); ++i)
cout << dv[i] << endl;
return 0;
}
матюкаться - плохо
ssm
Старшина
 
Сообщений: 46
Зарегистрирован: Ср апр 23, 2003 4:49 pm
Откуда: гоновер, германия
Пункты репутации: 0

След.

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1