Wczytywanie i klasyfikacja polskich znaków

0

potrzebuje wyłapać polskie litery, napisałem ten kod, jednak w żaden sposób nie zwraca on na nie uwagi.
jak zrobić aby wyłapało w ten sposób polskie litery?

#include <locale.h>
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>

int main(void) {
    setlocale(LC_ALL, "pl_PL.UTF-8");
    // Open the file for reading
    FILE *file = fopen("slowa.txt", "r");
    if (file == NULL) {
        fprintf(stderr,"nie dalo otworzyc\n");
        return 1;
    }
    wchar_t c;
    while ((c = fgetwc(file)) != WEOF) {
        if (c=='ą'){
            printf("lolz\n");
        }
    }
    fclose(file);
    return 0;
}
2

A co według ciebie reprezentuje 'ą'?
Kompilator nie krzyczy na ciebie, że ten znak nie mieści się w char (warning).
W końcu w UTF-8 'ą' składa się z dwóch bajtów.
Spróbuj L'ą' (czyli literał typu wchar_t).

1

Po poprawkach wszystko u mnie działa: https://godbolt.org/z/MjboP6K1h
Może locale name nie działa na twoim systemie (inaczej się nazywa).

Poprawki z raportowaniem błędów: https://godbolt.org/z/aKf6ecqGq

0

Ja bym kombinował w ten sposób, jak w env masz nastawione UTF-8 PL to nic nie robisz tylko sprawdzasz co zwraca mblen.
Ewentualnie wpierw zobacz jakie masz locales i nastaw jak np., domyślnie masz ustawione C lub posix. Prawie nigdy się tym nie bawię, więc to sa wskazówki do zweryfikowania,

0

Na ile wiem wszystkie lokale dotyczą wyłącznie wczytania/wypisania znaków z/na konsole ...
Kodowanie znaków w plikach to zupełnie inny temat.

0

Nie łapie L'ą', ale co łapie ?
Co masz na debuggerze.

Na margiesie, jako już javowiec / szarpowiec jestem zniesmaczony jak to jest zaprojektowane.
globalne locale, aby tylko przeczytać jeden plik ... to nie jest dobry design.
A co jak jeden plik po norwesku (ISO-89xxxx) a drugi po rosyjsku ?

_13th_Dragon napisał(a):

Na ile wiem wszystkie lokale dotyczą wyłącznie wczytania/wypisania znaków z/na konsole ...
Kodowanie znaków w plikach to zupełnie inny temat.

O! Ciekawy trop.

ps. widzę, kol @Gamble Believer nie jest daleko od (jakby) oficjalnej dokumentacji, gdzie są stringowe literały bez L' itd
https://en.cppreference.com/w/c/io/fgetwc
Nie podnosi to mojego poziomu zaufania do biblioteki

1 użytkowników online, w tym zalogowanych: 0, gości: 1