• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Porównywanie polskich znaków w C

Hosting forpsi easy 1 pln
0 głosów
71 wizyt
pytanie zadane 18 listopada w C i C++ przez persi Nowicjusz (120 p.)
zamknięte 19 listopada przez persi

Hej. Mam problem z porównywaniem polskich znaków. Muszę napisać program który po wczytaniu z konsoli dnia i miesiąca jako char wypisze odpowiedni dzień miesiąca. 
 

char* getZodiacSign(char* month, int day) {
    if ((strcmp(month, "grudzień") == 0 && day >= 23 && day <= 31) || (strcmp(month, "styczeń") == 0 && day <= 19 && day >= 1)) {
        return "Koziorożec";
    }
    return "Podales zle dane"; // Jeśli nie pasuje do żadnego znaku zodiaku
}

Sprawdziłem printf i wczytywanie działa poprawnie. jedynie problem polega na porównywaniu znaków. Probowałem używać wchar_t ale też nie działa. Jeśli ten sposób powinien działać to mogę pokazać kod. W sposobie z wchar_t nie działa mi wypisywanie. Wypisuje "???????".

Mam pomysł aby podzielić słowo np. grudzień na grudzie oraz ń i wtedy strcmp(month, "grudzie") i później ń == 241, ale jest to ostateczność i na dodatek nie wiem czy to zadziała.

Pozdrawiam

komentarz zamknięcia: uzyskałem odpowiedź
komentarz 18 listopada przez overcq Pasjonat (20,560 p.)

Prawdopodobnie masz inne kodowanie znaków w edytorze kodu a konsoli.

Tutaj ludzie próbowali z UTF-8: How to make CB editor and Windows agree on a character set?

komentarz 18 listopada przez persi Nowicjusz (120 p.)

Znalazłem w ustawieniach, że mam standard

CP852 (DOS Latin II)

I probowałem przyrównywać ń do odpowiedniej wartości w kodzie ascii ale to nic nie dało. Mam pomysł, że może być to wina

    sscanf(bufor, "%s %s", day, month);

teraz jak printf("%s %s", day, month") to mi działa dobrze i wypisuje grudzień. I ten sscanf może jakoś zmieniać standard przez co porównywanie może nie działać poprawnie.

Nie wiem, co mam teraz zrobić. Mój komentarz jest napisany dość chaotycznie, ale probowałem wielu rzeczy i też cieżko mi jest to opisać. Teraz moje pytanie czy uzgodnienie kodowania dla edytora kodu i konsoli coś da?

 

(Jak po prostu daje printf("grudzień") to wypisuje w konsoli grudzie˝  )

komentarz 18 listopada przez j23 Mędrzec (194,340 p.)

Tutaj masz prawdopodobnie klasyczny problem kodowania, o czym wspomniał @overcq.

Edytor w którym piszesz program prawdopodobnie ma kodowanie systemowe, czyli Windows-1250, zatem wszystkie literały w twoim programie też będą w takim kodowaniu. Tekst pobrany z konsoli to - jak wspomniałeś - CP852. Dlatego porównanie nie działa, bo porównujesz wyrazy w różnych kodowaniach.

Rozwiązanie:

  • zapisać pliki źródłowe w UTF-8 z BOM-em
  • ustawić w opcjach kompilatora, by kodowanie literałów było w CP852
komentarz 19 listopada przez persi Nowicjusz (120 p.)
super, dziękuje bardzo za pomoc

Podobne pytania

0 głosów
0 odpowiedzi 162 wizyt
pytanie zadane 9 maja 2022 w PHP przez imagim Obywatel (1,090 p.)
0 głosów
1 odpowiedź 774 wizyt
pytanie zadane 2 października 2019 w C i C++ przez Karpik Użytkownik (680 p.)
+1 głos
2 odpowiedzi 235 wizyt

92,133 zapytań

140,789 odpowiedzi

317,830 komentarzy

61,457 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 1886p. - Łukasz Eckert
  2. 1856p. - Dawid128
  3. 1844p. - Marcin Putra
  4. 1844p. - CC PL
  5. 1818p. - rafalszastok
  6. 1775p. - Mikbac
  7. 1760p. - rucin93
  8. 1741p. - sefirek
  9. 1682p. - Adrian Wieprzkowicz
  10. 1652p. - Eryk Andrzejewski
  11. 1644p. - jaroslawroszyk
  12. 1565p. - Rafał Trójniak
  13. 1467p. - dia-Chann
  14. 1445p. - nidomika
  15. 1424p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...