• 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

Object Storage Arubacloud
0 głosów
174 wizyt
pytanie zadane 18 listopada 2023 w C i C++ przez persi Nowicjusz (120 p.)
zamknięte 19 listopada 2023 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 2023 przez overcq Pasjonat (21,730 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 2023 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 2023 przez j23 Mędrzec (194,920 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 2023 przez persi Nowicjusz (120 p.)
super, dziękuje bardzo za pomoc

Podobne pytania

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

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...