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

question-closed Polskie znaki w Void

Object Storage Arubacloud
+1 głos
372 wizyt
pytanie zadane 31 października 2021 w C i C++ przez ViniVici Początkujący (300 p.)
zamknięte 17 sierpnia 2023 przez ViniVici
Witam.

Przy pisaniu programu w main używam kodu:  setlocale(LC_ALL,"");

W w/w przypadku działał więc wystarczał.

Gdy jednak dochodzimy do plików .h, i odesłania z main do void już powyższy kod nie działa.

Próbowałem sposobu z filmiku 15 pasji informatyki ale tez fiasko.

Czy ma ktoś jakąś skuteczną poradę? Z góry dziękuje jako (mam nadzieje ze niedługo) amator programowania.
komentarz zamknięcia: .
komentarz 31 października 2021 przez j23 Mędrzec (194,920 p.)
Chyba musisz podać jakiś kod, bo nie wiadomo, o co z tym voidem chodzi.
komentarz 31 października 2021 przez ViniVici Początkujący (300 p.)
edycja 8 listopada 2021 przez ViniVici

Ok

int main ()
{
setlocale(LC_ALL,"");
        cout <<""<<endl<< "Czy chcesz zapoznać się z instrukcją gry?  tak/nie"               <<endl<<""<<endl;
        cout <<" W każdym momencie trwania gry możesz wezwać instukcje."                     <<endl;
        cout <<" Podaj wtedy "<<'"'<<"0"<<'"'<<" (zero)."                                    <<endl<<""<<endl;
        cin  >>inst;
 
 transform(inst.begin(),inst.end(),inst.begin(),::toupper);
    if ((inst!="TAK")&&(inst!="NIE")) zla_komenda ();
      }while ((inst!="TAK")&&(inst!="NIE"));
    if (inst=="TAK")    //INSTRUKCJA VOID
      {
        instrukcja ();
      }
}

 

komentarz 8 listopada 2021 przez ViniVici Początkujący (300 p.)
void instrukcja()
{
    kolor (14);
    setlocale(LC_ALL,"");
        cout <<""<<endl;
        cout <<""                                                                                       <<endl;
        cout <<"         Gra jest podzielona na 3 etapy. Po każdym wyświeli sie hasło."                 <<endl;
        cout <<"                Pozwoli on pożniej wznowić grę od danego etapu."                        <<endl;
        cout <<"        Gra polega na dojściu z pokoju startowego do ostatniego pokoju."               <<endl;
        cout <<"            Zaczynasz w pokoju nr 1, a ostatni pokój ma numer 31."                      <<endl;
        cout <<"  Pierwszy etap kończy się na pokoju nr10, drugi etap=20 i trzeci etap na 31"           <<endl;
        cout <<"            Przechodzać do kolejnych pokoji podajesz numer pokoju."                     <<endl;
        cout <<"          Jeśli wracasz do poprzedniego pokoju, też podajesz jego numer."               <<endl;
        cout <<"                W grze nie zawsze możesz otworzyć każde dzwi."                          <<endl;
        cout <<"              Czasem jest potrzebny klucz, kod, zagadka, etc."                          <<endl;
        cout <<"         Poprzez wezwanie następującyh cyfr/ciągu cyfr użyskamy: "                      <<endl;
        cout <<""                                                                                       <<endl;
        cout <<"     Użycie/aktywacje przedmiotu:                             "<<'"'<<"888"<<'"'        <<endl;
        cout <<"     Sprawdzenie swojego inwentarza, rozwiązanych zagadek:    "<<'"'<<"999"<<'"'        <<endl;
        cout <<"     Ponowne wezwanie instrukcji:                             "<<'"'<<"0"<<'"'<<"(zero)"<<endl;
        cout <<""<<endl;
    drzwi=bezpiecznik;
    kolor (7);
}

 

1 odpowiedź

0 głosów
odpowiedź 31 października 2021 przez ViniVici Początkujący (300 p.)
edycja 8 listopada 2021 przez ViniVici
edit
2
komentarz 31 października 2021 przez j23 Mędrzec (194,920 p.)
edycja 31 października 2021 przez j23

Przenieś tego posta do komentarza pytania (w edycji odpowiedzi).


setlocale wystarczy ustawić raz, gdzieś na początku. Zgaduje, że problem polega na tym, że plik z definicją funkcji instrukcja jest w innym kodowaniu niż plik z main.

Generalnie polskie znaki w konsoli Windowsa to śliski temat. Konsola domyślnie działa w CP852 i w takim kodowaniu powinieneś wysyłać tekst do strumienia std::cout.

Używasz C::B, więc pewnie MinGW. W opcjach projektu, w Other compiler options dodaj -fexec-charset=cp852 Wszystkie pliki źródłowe zapisz w utf-8.


        cout <<""<<endl<< "Czy chcesz zapoznać się z instrukcją gry?  tak/nie"               <<endl<<""<<endl;
        cout <<" W każdym momencie trwania gry możesz wezwać instukcje."                     <<endl;
        cout <<" Podaj wtedy "<<'"'<<"0"<<'"'<<" (zero)."                                    <<endl<<""<<endl;

Można prościej:

cout << "\nCzy chcesz zapoznać się z instrukcją gry?  tak/nie\n\n"
    "  W każdym momencie trwania gry możesz wezwać instukcje.\n"
    "  Podaj wtedy \"0\" (zero).\n\n";

PS. funkcji nie powinieneś definiować w plikach nagłówkowych .h, od tego są pliki źródłowe .cpp. W nagłówkach dajesz tylko deklaracje.

komentarz 8 listopada 2021 przez ViniVici Początkujący (300 p.)

Ok, czyli ze tak powiem, przez jakiś czas praktykowałem "złe" kodowanie. Starałem się każde void umieszczać właśnie w .h, a źródłowe miały być głównym kodem. Czyli np: jak dałeś nie odpowiednią odpowiedz (void ze spisem odpowiednich odpowiedzi/podpowiedzi skąd jest błąd, aby uniknąć powtórzeń kodu). Co zatem mogę/powinienem umieszczać w plikach nagłówkowych?

setlocale - tak wiem ze wystarczy na początku, z ta moje pytanie bo ustawiony pliku nagłówkowym nie działa.

Coś nie ogarnąłem co mam zmienić/przełączyć w opcjach- używam Code::Block 20.03

(skąd wiesz ze code- z powodu doradztwa na kanale Pasja Informatyki?)

Ok, ze mogę prościej z \n wiedziałem (ale nie zawsze mi wychodziły więc dla pewniaka robię endl), ale nie widziałem ze po użyciu \ wyświetli mi " (ciągle używałem ' ') :)

Dziękuję za dotychczasową pomoc :)

komentarz 8 listopada 2021 przez j23 Mędrzec (194,920 p.)

  Co zatem mogę/powinienem umieszczać w plikach nagłówkowych?

Deklaracje funkcji, zmiennych, typów. Definicje klas/struktur, szablonów i funkcji inline.

Coś nie ogarnąłem co mam zmienić/przełączyć w opcjach

Nie zmienić/przełączyć, tylko dopisać wspomnianą opcję w miejscu, które wskazałem.

skąd wiesz ze code- z powodu doradztwa na kanale Pasja Informatyki?

No przecież sam napisałeś (w treści odpowiedzi, którą miałeś przenieść do komentarzy, a nie usuwać jej treść), że używasz Code::Blocks.

Ok, ze mogę prościej z \n wiedziałem (ale nie zawsze mi wychodziły więc dla pewniaka robię endl)

Nie wykluczone, że w C::B strumień std::cout  ma włączone buforowanie i dlatego nie zawsze tekst pojawiał się w całości. Wtedy wystarczy jeden endl na końcu, ewentualnie wywołać metodę flush.

ale nie widziałem ze po użyciu \ wyświetli mi " (ciągle używałem ' ') :)

Chyba nie rozumiem...

Podobne pytania

–2 głosów
0 odpowiedzi 757 wizyt
pytanie zadane 28 sierpnia 2020 w Systemy operacyjne, programy przez gnu_ewm Gaduła (3,340 p.)
0 głosów
1 odpowiedź 710 wizyt
0 głosów
1 odpowiedź 1,085 wizyt
pytanie zadane 17 listopada 2019 w Systemy operacyjne, programy przez rei656 Początkujący (290 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...