Войти

Показать полную графическую версию : [решено] Потоковый ввод/вывод


котвася
06-08-2010, 00:28
пишу два кода, оба по смыслу одинаковые, но не один не работает:

int main()
{
//setlocale(LC_ALL, ".1251");
int x = 100;
cout << setiosflags(ios::hex | ios::showbase) << x << endl;
system("pause");
return 0;
}


int main()
{
//setlocale(LC_ALL, ".1251");
int x = 100;
cout << cout.flags(ios::hex | ios::showbase) << x << endl;
system("pause");
return 0;
}

пишу в MVS2008, первый вообще не срабатывает, а второй чушь выдает.
Должно печатать 100 в 16-ричной сист.исч -> 0x64
что не так?
написал:

int main()
{
//setlocale(LC_ALL, ".1251");
int x = 100;
cout << cout.flags(ios::hex | ios::showbase) << x << endl;
cout << x << endl;
system("pause");
return 0;
}

второй раз cout выводит правильно. В чем дело?

котвася
06-08-2010, 00:34
правильность работы 2-го кода добился уже:)
остался 1-й помогите, а то сам разберусь! :)
не понятно почему он не работает вообще: число 100 так и выводит 100.

да и вообще чет и другие флаги через setiosflags() не работают должным образом.

котвася
06-08-2010, 00:56
решено, надо сначала сбросить flag
resetiosflags(ios::dec).
Почему так?
Почему установленный новый не используется(не устанавливается)?
как обнулить long для всех флагов?

котвася
06-08-2010, 01:16
нашел два способа методом научного тыка :) :

resetiosflags(0x200);
cout.flags(0);

не понятно на счет первого, это получается флаг dec имеет "номер" условно 513 и его обнуляют или 0х200 обнуляет все.
Во втором так точно все, наверное, ->long = 0;

Drongo
06-08-2010, 10:39
Так пробовал?
#include <iostream>
using namespace std;


int main()
{
//setlocale(LC_ALL, ".1251");
int x = 100;
cout.flags(ios::hex | ios::showbase);
cout << x << endl;
system("pause");
return 0;
}




© OSzone.net 2001-2012