Polskie znaki diakrytyczne w Dev-C++ i Code::Blocks 10.05

0

Polskie znaki diakrytyczne w Dev-C++ i Code::Blocks10.05

Witam,
Problem jest następujący.
Dev-C++ ogarnia poniższy kod i po uruchomieniu tego "programu" po prostu pozwala wyświetlać znaki polskie w konsoli, a Code::Blocks 10.05 nie ogarnia tego kodu...
Czy ktoś jest w stanie tak zmodyfikować ten kod lub podać nowy, który zmusi C::B do wyświetlania polskich znaków po uruchomieniu poniższego "programu"?

#include <iostream> 
#include <conio.h> 
#include <string> 
#include <cstdlib>

using namespace std;

char *tr(char *str) // Konwersja z win1250 na cp852
  { 
   static char buff[256]; 
   char cp[]="\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
   if(strlen(str)>=sizeof(buff)) 
   return str; 
   char *bf=buff; 
   while(*str) 
     { 
      char *pos=strchr(cp+18,*str); 
      *(bf++)=pos?*(pos-18):*str; 
      ++str; 
     } 
   *bf=0; 
   return buff; 
  }
  


int main(int argc, char *argv[])
{
        
    cout<<tr("\nZAŻÓŁĆ GĘŚLĄ JAŹŃ\n\n\n");
         
    system("PAUSE");
    return 0;
}
0

Code::Blocks ma coś takiego jak debugger. Użyj go i zobacz, czy funkcja dostaje znaki w kodowaniu 1250.

1

zamiast tej funkcji tr() wystarczy dać

    setlocale(LC_ALL,"");

na początku funkcji main.

0

Niestety jeszcze jestem zbyt zielony żeby rozumieć o co chodzi debuggerowi, dlatego proszę o konkretną modyfikację kodu lub nowy kod.
Najlepiej o prostej funkcjonalności powyższego, który również, nawiasem mówiąc, nie jest mojego autorstwa i którego działanie rozumiem może w 30%.
Powoli uczę się... miesiąc temu nie rozumiałem z niego nic, ale prostota użycia i zadowalający efekt mimo wszystko skusiły mnie do korzystania z tego "programiku" : )

Wpisując do Dev-C++
cout<<tr("\nZAŻÓŁĆ GĘŚLĄ JAŹŃ\n\n\n");

Po uruchomieniu dostawałem tekst:

ZAŻÓŁĆ GĘŚLĄ JAŹŃ
(bez krzaczków)

I mam nadzieję, że takie coś również można zrobić w Code::Blocks.

Proszę o pomoc

0

JUŻ SPRAWDZAM JAK TO DZIAŁA,
DAJCIE MI CHWILE

zamiast tej funkcji tr() wystarczy dać

setlocale(LC_ALL,"");

na początku funkcji main.

0

HURA! Działa bez przeszkód!!!

Dzięki serdeczne Azarien : )

Wracam do nauki! Fajnie że tu jesteście : )

Pozdrawiam wszystkich

PS. Nie przejmujcie się moimi wypocinami po odpowiedzi od Azarien, nie zauważyłem nawet jak dodał swoją odpowiedź : )

Do miłego

0
Wannabe napisał(a):

HURA! Działa bez przeszkód!!!

Dzięki serdeczne Azarien : )

Wracam do nauki! Fajnie że tu jesteście : )

Pozdrawiam wszystkich

PS. Nie przejmujcie się moimi wypocinami po odpowiedzi od Azarien, nie zauważyłem nawet jak dodał swoją odpowiedź : )

Do miłego

Super działa

0
Wannabe napisał(a):

JUŻ SPRAWDZAM JAK TO DZIAŁA,
DAJCIE MI CHWILE

zamiast tej funkcji tr() wystarczy dać

setlocale(LC_ALL,"");

na początku funkcji main.
to znaczy gdzie dokładnie?

0

Wyniki tych wszystkich działań zależą od tego jak kodowany jest plik w którym jest napisany program.
U mnie to nie jest na początku programu:
setlocale( LC_ALL, "" );
std::cout << "ąćęłńóśżźĄĆĘŁŃÓŚŻŹ" << std::endl;

A zadziałało po ustawieniu w edytorze Code::blocks kodowania plików CP1250.
Konsola mówi mi, że używa CP852 (ale nie wiem, czy w to można wierzyć):
std::cout << "Numer strony : " << GetConsoleOutputCP()

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