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

cout << . << . << - C++

Восстановить пароль Регистрация
 
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
06.07.2013, 03:12     cout << . << . << #1
почему
C++
1
cout
начинает преобразовывать переменные с конца а выводить с начала ??
т.е.
C++
1
2
3
4
5
6
7
8
9
10
cout << "What is your name and how old are you ? ";
    cin >> name>>age;
    cout << name << "Your age in various number system :\n"<<
    "Decimal : " << dec << age << endl <<
    "Octal   : " << oct << age << endl <<
    "Hex     : " << hex << age << endl << endl <<
    "Left shift on 2 bits : " << endl <<
    "dec     : " << dec << ( age <<= 2 ) << endl <<
    "Octal   : " << oct << ( age <<= 2 ) << endl <<
    "Hex     : " << hex << ( age <<= 2 ) << endl << endl;
если ввести число 22 то он выводит на экран полный бред!
сначала сддвишает в 16-ричном виде на 2, потом еще раз,... и поднявшись до первого вывода начинает писать уже преобразованную переменную "age" ??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2013, 03:12     cout << . << . <<
Посмотрите здесь:

cout vs. std::cout C++
C++ cout
[C++] cout От A до Z и от 0 до 9 C++
cout C++
cout C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newyork7776
 Аватар для newyork7776
346 / 339 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
06.07.2013, 03:32     cout << . << . << #2
Цитата Сообщение от zybrzybr Посмотреть сообщение
( age <<= 2 )
а это значить?напишите как должно вывести на монитор строку 9,10,11
и можна условие задачи и ваш код
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
06.07.2013, 03:39  [ТС]     cout << . << . << #3
C++
1
2
3
4
    int z = 2;
     cout << z<< endl;
     cout << (z<<2)<<endl;
     cout << ( z <<= 2)<<endl;
выводит как и должно!

на msdn.microsoft.com написано что а<<=2 - сдвиг на 2 бита. и я бы туда не полез если бы когда то не читал в книге. точно помню что подобное читал. хотя не понимаю зачем это равенство вообще нужно)
но вопрос не в этом ,а в том что cout как то странно работает! я запустил по шагам и он начал работу с самого конца и причем меняет значения переменной. Cout получает значение или ссылку на нее ??

Добавлено через 1 минуту
Цитата Сообщение от newyork7776 Посмотреть сообщение
а это значить?напишите как должно вывести на монитор строку 9,10,11
и можна условие задачи и ваш код
да код это собственно и весь. это в главе перегрузки потокового вывода\ввода...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2013, 05:41     cout << . << . << #4
Точки следования
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
06.07.2013, 13:51  [ТС]     cout << . << . << #5
так там точки следования должны быть
C++
1
endl
но вопрос в дргугом, почему сщге работает с конца а выводит уже измененный выриант. у кого нибудь еще он так же работает ии толдько у меня?!))
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
06.07.2013, 16:03     cout << . << . << #6
Здесь не нужно <<=, а просто <<.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string name; 
    int age;
    cout << "What is your name and how old are you ? ";
    cin >> name>>age;
    cout << name << "Your age in various number system :\n"<<
    "Decimal : " << dec << age << endl <<
    "Octal   : " << oct << age << endl <<
    "Hex     : " << hex << age << endl << endl <<
    "Left shift on 2 bits : " << endl <<
    "dec     : " << dec << ( age << 2 ) << endl <<
    "Octal   : " << oct << ( age << 2 ) << endl <<
    "Hex     : " << hex << ( age << 2 ) << endl << endl;
}
Добавлено через 1 минуту
Цитата Сообщение от zybrzybr Посмотреть сообщение
так там точки следования должны быть
ты в инструкции изменяешь значение переменной, тут и будет UB.
там нету точки следования.
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
06.07.2013, 16:05  [ТС]     cout << . << . << #7
согласен уже исправил, но все же в чем разница между <<= и просто << ?
а главный вопрос у Вас тоже он обрабатывал с конца, а выводил уже измененный с начало ?

Добавлено через 1 минуту
Цитата Сообщение от Dani Посмотреть сообщение
там нету точки следования.
а
C++
1
endl
не чистит буфер ?
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
06.07.2013, 16:13     cout << . << . << #8
zybrzybr, <<= сдвигает и присваивает сразу.
<< просто сдвигает и возвращает результат (не изменяя твою переменную).
Это как + и +=

Добавлено через 2 минуты
Цитата Сообщение от zybrzybr Посмотреть сообщение
не чистит буфер ?
std::cout << a << b;
тоже что и
operator<<(operator<<(std::cout, a), b); А, как известно:
Порядок, в котором вычисляются аргументы не определен, но эта точка следования гарантирует, что все ее побочные эффекты проявятся на момент входа в функцию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2013, 16:20     cout << . << . <<
Еще ссылки по теме:

почему то не переводит на другую строку cout << "введенный пункт назначения:" << a[i].pn << ' ' ; cout << "введенный пункт назначения:" << a[i].num C++
cout.setf и cout.precision C++
В чем разница std::cout и просто cout? C++

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

Или воспользуйтесь поиском по форуму:
zybrzybr
 Аватар для zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
06.07.2013, 16:20  [ТС]     cout << . << . << #9
но всеже разный компилятор будет по разному обрабатывать получается ? т.е. у меня с конца начинает обработку выражений, а у Вас может обрабатывать и выводить сразуже, это и есть побочный эфект или порядок вычисления ?
если я хочу что бы он вычислял и сразу же выводил , то нужно ";" ставить , я правильно понял?
Yandex
Объявления
06.07.2013, 16:20     cout << . << . <<
Ответ Создать тему
Опции темы

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