Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2328 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Kokį kodą benaudočiau, tas pats. Įvedu su lietuviškom raidėm, perjungiu Code::Blocks, iš lietuviškų raidžių pasidaro tokie hieroglifai...

#include <iostream>
#include <locale>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Lithuanian");

    int a, b, c, h, m;

    cout << "Áveskite kiek valandø buvo, kai taksistas iðvaþiavo: ";
    cin >> a;

    cout << "Áveskite kiek minuèiø buvo, kai taksistas iðvaþiavo: ";
    cin >> b;

    cout << "Áveskite kiek minuèiø vaþiavo taksistas ";
    cin >> c;

    h = (a * 60 + b + c) / 60;
    m = (a * 60 + b + c) % 60;

    cout << "Taksistas tikslà pasiekë " << h << " valandà ir " << m << " minuèiø";

    return 0;
}

 

Nuoroda į komentarą
Dalintis per kitą puslapį

Pirmiausia, čia turbūt Code::Blocks'ų editor'ius saugo ir/ar užkrauna tekstą su bloga koduote. Nustatyk koduotę į UTF-8, pakeitęs savo editor'iaus nustatymus į šiuos:

 


06XjoSxgSBa41GDxVgMRoA.png

Deja, po šių pakeitimų lietuviškos raidės išliks tik faile su programos kodu. Po kompiliavimo programa greičiausiai viską atvaizduos ne taip, kaip norisi, jei yra naudojama Windows operacinė sistema. Kaip buvo minėta, reikės iškviesti std::setlocale() funkciją. Vis dėlto, nors ir tą padarysime, lietuviškų raidžių neišvysime, jeigu yra naudojama Windows operacinė sistema. Norint Windows operacinėje sistemoje tai atlikti, reikia naudoti ne std::string, bet std::wstring tipo kintamuosius (automatiškai tada naudosim ir std::wcout ir pnš.):

// OS:             Windows 10, versija 1709
// Kompiliuota su: https://nuwen.net/mingw.html
//                 http://landinghub.visualstudio.com/visual-cpp-build-tools
// Failo koduotė:  UTF-8 (UTF-8-BOM naudojant MSVC)
//

#include <clocale>
#include <iostream>
#include <string>

int main()
{
    std::setlocale(LC_ALL, "Lithuanian");

    // Svarbu nepamiršti prirašyti 'L' raidės prieš string'o literą!
    std::wstring message = L"Aš esu programa, parašyta C++ kalba";
    std::wcout << message << '\n';

    std::wcin.get();

    return 0;
}

Apie std::string, std::wstring bei kodavimą, patariu paskaityti šioje Stack Overflow temoje bei Utf-8 Everywhere puslapyje. Jei nesinori naudoti std::wstring tipo kintamųjų (dėl tam tikrų priežasčių aptartų mano nurodytoje temoje), galima pakeisti Windows komandinės eilutės code page'ą sukuriant script'ą, kuris pasileidžia automatiškai, kai tik komandinė eilutė iškviečiama. Plačiau apie tai šioje Super User temoje.

Jei reikia, jog programa veiktų tinkamai be jokių script'ų, o naudoti std::wstring nesinori, tada reikia naudotis Windows API funkcijomis, šiuo atveju, SetConsoleOutputCP(), kuri pakeis esamos komandinės eilutės sesijos code page'ą. Žinoma, šis būdas problematiškas, nes, kiek testavau, su standartiniais C++ įvesties ir išvesties srautais kyla nemažai problemų. Yra keli sprendimo būdai. Vienas jų būtų perrašyti std::cout buferį, kaip ir parašyta šiame Stack Overflow atsakyme. Tai visai įdomus hack'as. Galiausiai, galima nenaudoti C++ įvesties ir išvesties srautų, o naudoti C įvestį ir išvestį:

// OS:             Windows 10, versija 1709
// Kompiliuota su: https://nuwen.net/mingw.html
//                 http://landinghub.visualstudio.com/visual-cpp-build-tools
// Failo koduotė:  UTF-8
//

#include <clocale>
#include <cstdio>
#include <string>
#include <windows.h>

int main()
{
    // Išsaugome seną komandinės eilutės code page'ą.
    UINT default_console_output_cp = GetConsoleOutputCP();
    // Pakeičiame dabartinės komandinės eilutės sesijos code page'ą.
    SetConsoleOutputCP(CP_UTF8);

    std::string message = "Aš esu programa, parašyta C++ kalba";
    puts(message.c_str());

    getc(stdin);

    // Atkuriame seną komandinės eilutės code page'ą.
    SetConsoleOutputCP(default_console_output_cp);

    return 0;
}

TL;DR: koduotės ir Windows'ai - galvos skausmas.

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2328 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.

Skelbimai


×
×
  • Sukurti naują...