Wcout, wchar_t – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Wcout, wchar_t – C / C++ – Fórum – Programujte.comWcout, wchar_t – C / C++ – Fórum – Programujte.com

 

Happyhippo
~ Anonymní uživatel
2 příspěvky
23. 7. 2012   #1
-
0
-

Ahoj někde jsem četl že maximální hodnota wchar_t je 65535, ale následující kód se zastaví na 255. Proč?
Dík za odpovědi

wchar_t wct=0;
for(int i =0;i<65536;i++)
{
  wct=i;
  wcout<<wct<<endl;
}
Nahlásit jako SPAM
IP: 88.102.98.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #2
-
0
-

Unicode má maximum 65535. No a proč to skončí na 255 resp. 256? Konzole Unicode není, takže ten znak se může interpretovat všelijak, ale nejspíš jako 0, prostě to zafunguje jako třeba Ctrl+C nebo tak něco :).

Nahlásit jako SPAM
IP: 78.80.52.–
ondra.holub+1
Stálý člen
23. 7. 2012   #3
-
0
-

Zkus to takto>

#include <iostream>

int main()
{
    wchar_t wct=0;
    for(int i = 0; i<65536; i++)
    {
        wct=i;
        std::wcout<<(long)wct<<std::endl;
    }
}
Nahlásit jako SPAM
IP: 194.138.12.–
Happyhippo
~ Anonymní uživatel
2 příspěvky
23. 7. 2012   #4
-
0
-

Zkusil jsem t os přetypováním na long. Výstup je toto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

atd...

Nahlásit jako SPAM
IP: 88.102.98.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #5
-
0
-

Potřebuješ nastavit konzoli na jiný typ kódování. SetConsoleOutputCP a SetConsoleCP by vypadaly nadějně, ale třeba v mém případě je to špatný, protože seznam dostupných CodePage se dostane zde:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

a já tam Unicode CP nemám. Tak jsem našel ještě jednu možnost, ale nevím, jestli to k něčemu bude, před výpis dej:

// file mode is UTF16 (translated)
_setmode(_fileno(stdout), _O_WTEXT);

nebo

// file mode is UTF16 no BOM (translated)
_setmode(_fileno(stdout), _O_U16TEXT);

a budeš potřebovat: 

#include <io.h>
#include <fcntl.h>
Nahlásit jako SPAM
IP: 78.80.52.–
ondra.holub+1
Stálý člen
23. 7. 2012   #6
-
0
-

#4 Happyhippo
A poslední číslo bylo 255, nebo 65535? Jestli 65535, tak je vidět, že wchar_t může obsahovat číslo větší než 255, tak je to snad OK, ne?

Nahlásit jako SPAM
IP: 194.138.12.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

Podobná vlákna

Nový řádek ve wchar_t — založil Štěpán

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý