Sposób na wyświetlanie polskich znaków diakrytycznych w programach konsolowych

Sposób na wyświetlanie polskich znaków diakrytycznych w programach konsolowych
CI
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 lat
0

Szukam sposobu, który pozwoli mi na wyświetlanie polskich znaków diakrytycznych w programach konsolowych.
Środowisko to Code::Blocks 10.05.

Mam np. taki kod:

Kopiuj
#include <iostream>

using namespace std;

int main()
{
    cout << "Ten program wyświetla tekst, który zawiera polskie znaki:" << endl;
    cout << endl;

    cout << "ó,ą,ś,ż,ź,ć,ń" << endl;
    cout << endl;

    system("pause");
}

Wiem, że mogę wywoływać te znaki z pomocą char(), ale jest to uciążliwe.

Szukałem na forum, dwa poniższe tematy zawierają chyba najwięcej przydatnych informacji.

http://4programmers.net/Forum/C_i_C++/179063-polskie_znaki_diakrytyczne_w_dev-c++_i_codeblocks_1005
http://4programmers.net/Forum/C_i_C++/113148-C++_Polskie_znaki

Z innego forum: http://forum.dobreprogramy.pl/kompilacja-polskie-znaki-konsoli-t304295-15.html#p2125883

Niestety, te sposoby u mnie nie działają. Wstawiłem również

Kopiuj
setlocale(LC_ALL,"");

Również nie działa. Może coś robię źle, a może to kwestia kompilatora ?


edytowany 2x, ostatnio: flowCRANE
Xitami
  • Rejestracja:ponad 20 lat
  • Ostatnio:około rok
0
Kopiuj
for(i=32; i<256; i++ ) printf("%6d %c", i, i);

dodanie znacznika <code class="cpp"> - @furious programming

edytowany 1x, ostatnio: flowCRANE
CI
Nie chodzi mi o wyświetlenie tablicy kodów ascii. Chodzi o ustawienie danego kodowania w kodzie tak, żeby nie trzeba było używać char(tu kod ascii), itp., tylko po prostu pisać "cout << "Polskie znaki: ą,ś,ć" << endl;", etc.
QE
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:55
0

206 - ć
210 - ł
230 - ś
242 - ó
245 - ą
251 - ę
253 - ź
276 - ż
344 - ń

przed liczba \

zeby ciagle tego nie pisac to tutaj jak sobie ulatwic zycie:
http://forum.dobreprogramy.pl/kompilacja-polskie-znaki-konsoli-t304295-15.html#p2125883 [to nie jest reklama...]

@ups sorry, mialem jakis blad i nie mialem tych linkow na poczatku - prosze o usuniecie posta

edytowany 3x, ostatnio: qeeepek
CI
Dzięki, znam to ;) Tylko, że to również zmniejsza czytelność kodu. Chodzi mi o coś prostszego i niezmniejszającego czytelności.
CI
Ten sam link podałem w pierwszym poście :D Tylko problem, że u mnie nie działa, nie wiem dlaczego.
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 godziny
0

A próbowałeś zmienić stronę kodową w konsoli (o ile da się pod Windowsem)? U mnie pod Linuksem twój kod z pierwszego posta wymagał tylko "zakomentowania" system("pause"); i ruszył bez problemu znaki poprawnie wyświetlając

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

Słabo szukałeś, bo problem był na forum poruszany wielokrotnie, w tym ostatni raz tydzień temu.

Jak uzyskać polskie znaki w strum. wyjścia

CI
Te sposoby również nie działają. Nie wiem o co chodzi. Może to kwestia Code::Blocks ? Może zainstalować MS Visual Studio ?
RE
Działają, tylko na 99% nie wiesz w jakim kodowaniu masz zapisany plik źródłowy.
CI
Wchodzę w Code::Blocks >> Settings >> Editor i tam mam ustawione Windows-1250.
Azarien
  • Rejestracja:około 21 lat
  • Ostatnio:około 2 godziny
1

zamiast kombinować z locale, należy zapisać plik źródłowy w kodowaniu CP852.

RE
Ta, rozwiązanie rodem z 1995 roku.
Azarien
i jedyne, kurna, słuszne.
RE
Tak samo jak korzystanie z goto.
CI
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 lat
0
sig napisał(a)

A próbowałeś zmienić stronę kodową w konsoli (o ile da się pod Windowsem)? U mnie pod Linuksem twój kod z pierwszego posta wymagał tylko "zakomentowania" system("pause"); i ruszył bez problemu znaki poprawnie wyświetlając

Wchodzę w Code::Blocks >> Settings >> Editor i tam mam ustawione Windows-1250.


edytowany 1x, ostatnio: cichociemny
Azarien
  • Rejestracja:około 21 lat
  • Ostatnio:około 2 godziny
0
Kopiuj
SetConsoleCP(GetACP());
CI
Tam ma być jakiś argument jeszcze ? Tak, to również nie działa, "wywala" błędy :(
Azarien
  • Rejestracja:około 21 lat
  • Ostatnio:około 2 godziny
1

po kolei:

• sztuczka z setlocale(LC_ALL,"") działa pod Visual C++, nie działa pod GCC (Mingw, CodeBlock...).
• sztuczka SetConsoleCP czasami działa, ale:

Kopiuj
#include <windows.h>
SetConsoleCP(GetACP());
SetConsoleOutputCP(GetACP());

i wymaga unicodowej czcionki w konsoli. na to nie masz za bardzo wpływu co ma użytkownik ustawione, więc ta metoda jest bezużyteczna.

• ustawienie kodowania pliku źródłowego na 852 zamiast 1250 definitywnie, nieinwazyjnie rozwiąże problem, jakkolwiek Revowi by się to nie podobało.

• jeśli już naprawdę nie przeżyjesz zapisania pliku "rodem z 1995", można konwertować tekst ręcznie:

Kopiuj
#include <windows.h>
#include <cstdio>
using namespace std;

int main(void)
{
    const char* napis = "Zażółć gęślą jaźń";
    char buff[256];
    CharToOemBuffA(napis, buff, sizeof(buff));
    printf("%s\n",buff);
    return 0;
}
edytowany 2x, ostatnio: Azarien
CI
Czyli trzeba będzie zainstalować MS Visual Studio i zobaczyć, jak to tam wygląda. EDIT: ten ostatni sposób w Code::Blocks również nie działa, są "krzaczki".
SA
Zmień CharToOemBuffA na CharToOemBuffW, a napis* przerób na unicode. IDE (codepage) razem z kompilatorem przerobi ogonki na uniwersalne unicode, skąd CharToOemBuffW już sobie poradzi niezależnie od codepage w źródłach programu. Najwyżej usunie ogonki, ale nie będzie krzaków.
CI
"a napis* przerób na unicode." Mam coś w kodzie zmienić czy jak ?
SA
const wchar_t* napis = L"Zażółć gęślą jaźń"; // o to chodzi.
Realmarecz
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Poznań
  • Postów:39
1

Temat jest wysoko w google jak sie szuka rozwiązania wiec uzupełnię ;)

Dla Visual Studio 2010 i innych:
Przed kompliacją!

File -> Advanced Save Options...
Encoding: Central European (DOS) - Codepage 852

Taki Bonus: Dodatkowo jeśli ktoś chciałby mieć weryfikacje tablicy char, czy pojedynczej tablicy stringa czy składa się tylko z liter i polskich znaków warto poznać taką funkcje jak iswalpha(skladnik[c]) WAŻNE !! oczywiście po ówczesnym ustawieniu tego wyżej ;P

Myślę że rozwiąże to wiele problemów i szukania ^^ No tutaj temat jest masakryczny ale w content jest dużo zdań i slow "polskie znaki c++" co powoduje że ma 3 miejsce pod tą fraza :P


Marecz <-> RealMarecz
edytowany 1x, ostatnio: Realmarecz
flowCRANE
A już miałem kogoś zrypać za beznadziejny tytuł... :)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)