• 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

VPS Starter Arubacloud
+1 głos
370 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 740 wizyt
pytanie zadane 28 sierpnia 2020 w Systemy operacyjne, programy przez gnu_ewm Gaduła (3,340 p.)
0 głosów
1 odpowiedź 687 wizyt
0 głosów
1 odpowiedź 1,068 wizyt
pytanie zadane 17 listopada 2019 w Systemy operacyjne, programy przez rei656 Początkujący (290 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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

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!

...