Jakým způsobem nastavit v tomto programu nebo obecně v C zobrazování českých znaků?
Ve výstupu printf nebo v řetězci .
Jinak to totiž ukazuje takové "nějaké" svoje náhražky.
Fórum › C / C++
České znaky v dev-c++
no co jsem si vsiml jak to resi ostatni tak to vypada nasledovne:
//******CESTINA*********************
char aa = 160; //á
char cc = 159; //?
char ss = 231; //š
char yy = 236; //ý
char ee = 130; //é
char eee = 216; //?
char ii = 161; //í
char rr = 253; //?
char zz = 190; //ž
char uu = 163; //ú
//**********************************
//a pak jen pises text nasledovne
cout<<"D"<<eee<<"kuji za V"<<aa<<ss<<" "<<cc<<"asn";
//z tohohle vyleze "Děkuji za Váš čas"
//samozrejmne ty cisla nejsou nahodna jsou z ascii taulky
//http://sorry.vse.cz/~xmard16/ascii/index.htm
no jo ale tohle je pro c++ ale já používám c, nebo to je jedno a kam bych to napsal
Tak to zkus takhle:
char ii=161;
char rr=253;
printf("tohle je p%csmenko %c",ii,rr);
paashi napsal:
Tak to zkus takhle:
char ii=161;
char rr=253;
printf("tohle je p%csmenko %c",ii,rr);
tohle mne taky napadlo ale nakonec se to asi stane neprehlednym :(
No vono v podstatě stejně jinou možnost nemáš, ale dá se docela jednoduše udělat hlavičkovej soubor ze všema znakama a pak de jenom o to vymyslet si pro ni nějaký přehledný označení.
PRO VŠECHNY:
#include <iostream>
using namespace std;
int main() {
char cc = 159;
char cc2 = -97;
cout << "Stlač" << cc << " enter pro konecn";
cout << "Stlač" << cc2 <<" enter pro konecn";
cout << "Stlač" << " enter pro konecn";
int i;
i = cc;
cout << "cc" <<": "<< cc << endl;
i = cc2;
cout << "cc2" <<": "<< cc << endl;
i = 'ź';
cout << "ź" <<": "<< cc << endl;
cin.get();
return 0;
}
Co se stalo???
1) proč 159 == -97? Typ char má totiž rozmezí od -128 do 127(je ale potřeba počítat se 128), čili 159 - 128 = 21, -128 + 21 = -97. Toto je standartní ochrana proti překročení maxima typu.
2) proč ? == ?? To už je složitější, je tu totiž nekompatibilita.
[url=http://www.labo.cz/mft/matasciit.htm]Toto je tabulka ASCII pro znaky 128 - 255 (odkaz)[/url]
A toto je ta vaše (zkompilujte)
#include <iostream>
using namespace std;
int main() {
unsigned char Uch;
int Ui = 128;
while (Ui < 256) {
Uch = Ui;
cout << Ui << "= " << Uch << endl;
Ui++;
}
cin.get();
return 0;
}
Je to trochu rozdílné že? Proč tabulka kompilátoru není kompatibilní s tabulkou Příkazového řádku nevím, ale pak je jednoduché řešení - pro písmena které chcete si najdete číslo v programu podle kódu výše a pak si vyhledáte znak v tabulce ASCII ten pak vepíšete jako nor. znak.
čili - ź = 159
159 = ź
//================================================================
// Ukol c.1 vytvořil Petr Slovák
//================================================================
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <wchar.h>
//----------------------------------------------------------------------------------
using namespace std;
//================================================================
int main(int argc, char* argv[])
{
wchar_t *text[5]= {
L"Když jsem byl malý, tak jsem chtěl",
L"být kosmonautem, poté jsem chtěl",
L"být strojvedoucím, ale jak jsem",
L"dospíval tak jsem přišel na to, že",
L"nejlepší je být politikem."};
setlocale(LC_ALL,"English_Czech.852");
for (int c = 0; c < 5; ++c)
{
wcout << text[c] << endl;
}
cin.get();
return 0;
}
ano - jenže tady už není použitý datový typ char, jenž je 256 bitový ale jeho o trochu větší 65536 bitový kolega w_chart - čili rozšířený typ char vytvořený pro ukládání znakové sady Unicode.
Ano pou?il jsem MSVC.?erpal jsem z knihy "Nau? se s?m" od "Herberta Schildta", kde je naps?no :
?[b Standardn? ] C++ otv?r? tak? ?irok?(16 bitov?) verze znak? t?cto prud? dat nazvan? wcin,??wcout?,?wcerr?,?wclog, ale my je v t?to knize nebudeme pou??vat.
Znamen? to snad, ?e MinGW kompil?tor nen? standardn? C++ ???????
koron napsal:
Ano pou?il jsem MSVC.?erpal jsem z knihy "Nau? se s?m" od "Herberta Schildta", kde je naps?no :?[b Standardn? ] C++ otv?r? tak? ?irok?(16 bitov?) verze znak? t?cto prud? dat nazvan? wcin,??wcout?,?wcerr?,?wclog, ale my je v t?to knize nebudeme pou??vat.
Znamen? to snad, ?e MinGW kompil?tor nen? standardn? C++ ???????
Ne, to rozhodne ne. Prave naopak bych rekl, ze MinGW dodrzuje stadnard daleko prisneji nez MSVC. A co se tyce objektu wcout, wcin, wcerr, wlog, tak na to jsem jeste nenasel odpoved. Kdyz chcu pouzit nektery z techto objektu musim pridat na samotny uvod makro _GLIBCXX_USE_WCHAR_T sice to kompilator sezere, ale pro zmenu po mne zacne rvat linker. Doposud se mi to nepovedlo rozchodit, ale abych pravdu rekl, nijak to zatim nepotrebuju.
Jura_ napsal:
Asan: Char ma jen 8 bitu a wchar_t ma 16 bitu
Omlouvám se, moje chyba - nějak jsem použil převod 1 znak = 1 bit a ani jsem se nad tím nepozastavil. Samozřejmě je char 8 bitový což nabízí 256 možností nastavení. :ehh...nemůžu najít stydlivého smajla:
S Dev-C++ ano, protože používá zastaralé gcc/g++ . Doporučuju použít Code::Blocks a nenovější GCC/G++ z MinGW.
Pak stačí zdrojový kód mít v UTF-8 a používát wchar_t nebo parametr pro gcc -fexec-charset=cp852 (pro češtinu)
Dál je potřeba použít správné locale:
#include <stdio.h>
#include <locale.h>
#ifdef WIN32
#define DEFAULT_LOCALE ".852"
#else
#define DEFAULT_LOCALE ".UTF-8"
#endif
int main()
{
setlocale(LC_ALL, DEFAULT_LOCALE);
printf("ěščřžýáíé\n");
return 0;
}
#16 FreeWind
stran Code::Blocks:
pokud někdo použije holou instalaci Code::Blocks s GCC atp., a nemá zdrojový kód v UTF-8 a nepoužívá wchar_t či pro gcc -fexec-charset=cp852, tak pro první prográmky pro konzoli stačí takto:
#include <iostream>
#include <locale.h>
#define DEFAULT_LOCALE ".1250"
using namespace std;
int main()
{
setlocale(LC_ALL, DEFAULT_LOCALE);
cout << "ěščřžýáíé\n";
return 0;
}
a konzole hned napoprvé rovnou vypíše české znaky v pořádku. Ta patrně jede v cp1250 což platí i pro 64 bitové win 11...
Kdysi jsem si taky nad tim lamal hlavu, ale chtel jsem to udelat pres nastaveni locale. Jenomze to se mi prave pod Dev-C++(resp. gcc, g++) nijak nepovedlo, takze pokud se to pomoci locale nekomu povedlo, tak dejte, prosim, vedet. Dik
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
České znaky ? — založil Lukas
České znaky — založil CommanderZ
DecodeURI české znaky — založil kalašnikov
[DB] - mysql a české znaky — založil micro.21
UTF 8 - české znaky — založil Mudr. Jiří Kopeček
Moderátoři diskuze