Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное поведение setlocale 
:(
    Опции темы
Toyamatokanava
Дата 20.4.2017, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Собственно вопрос вот какой, если если следующий код скомпилировать в одном исходнике, то будет выводиться русский язык в консоль, как показано в методе instance 
Код

first_command*  first_command::instance()
{
    setlocale(LC_ALL, "Rus");
    cout << "Русский язык" << endl;
    if (m_instance == 0)
    {
        m_instance = new first_command();
    }
    //static first_command m_instance;

    return m_instance;
}

Если же подключить классы отдельно в хидерник и подключить его к исходнику, то будут в консоли кракозябры.
Скажите что не так??
Внизу полный листинг программы
Код

#include "stdafx.h"
#include <string>
#include <iostream>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <iostream>
#include <iterator>
#include <locale>
using namespace std;
class command;
struct data_struct
{
    string list_command[7];//1
    string string_commands;
    int number_command;//для команды 2
    int celoe;//для команды 3
    string *str;//для команды 4
                //Point p[4];//для команды 5
    string *string;//6
    int socket_client;//7
    command* pcommand;
};

class command
{

public:
    command() { }
    // string * name;//РёРјСЏ команды
    //string * description;//описание команды
    // virtual void Treatment() ;//обработка
    virtual void Treatment(data_struct*) = 0;//обработка
    virtual void Extradition() = 0;//выдача
    virtual command * get_following() = 0;//обработка
    virtual command * get_previous() = 0;//выдача
    virtual void  set_following(command *) = 0;//обработка
    virtual void  set_previous(command *) = 0;//выдача
    virtual string  get_name() = 0;//выдача
                                   //command *following, *previous;

};

class first_command :public command
{
    first_command();
    ~first_command() {}

    static first_command* m_instance;
public:

    static first_command *instance();
    string  name;
    string description;
    void Treatment(data_struct*);//обработка
    void Extradition();//выдача
    command * get_following();//обработка
    command * get_previous();//выдача
    string  get_name();//выдача
    void  set_following(command *following);//обработка
    void  set_previous(command *previous);//выдача    
    command *following, *previous;
};
first_command *first_command::m_instance = 0;


first_command::first_command()
{
    //setlocale(LC_ALL, "1251");
    //SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
    //Описание команды
    //cout << "constructor   Констуктор\n";
    description.append("Вывести список доступных команд");
    //Имя команды    
    name.append("Команда номер 1");
    //    name = from_DOS("Команда номер 1");
}

first_command*  first_command::instance()
{
    setlocale(LC_ALL, "Rus");
    cout << "Русский язык" << endl;
    if (m_instance == 0)
    {
        m_instance = new first_command();
    }
    //static first_command m_instance;

    return m_instance;
}

void first_command::Treatment(data_struct *d)//обработка информации, здесь нужно собрать инфу о всех командах
{

    command* element = d->pcommand;

    int i = 0;
    while (element)
    {

        d->list_command[i] = element->get_name();
        i++;
        element = element->get_following();

    }
    d->string_commands.clear();
    for (int j = 0; j < i; j++)
        d->string_commands.append(string("\n") + d->list_command[j]);
    //d->string_commands.append(string('\0'));



}

void first_command::Extradition()//выдача
{

}

// Реализация

command * first_command::get_following()//обработка
{
    return following;
}
command * first_command::get_previous()//выдача
{
    return previous;
}

string first_command::get_name()
{
    return name;
}

void first_command::set_following(command * follow)
{
    following = follow;
}

void first_command::set_previous(command * prev)
{
    previous = prev;
}

int main()
{
    
    first_command *command1 = first_command::instance();
    system("pause");
    return 0;
}

PM MAIL   Вверх
volatile
Дата 21.4.2017, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Вы сначала наведите порядок с своих исходниках
У вас в одном файле (судя по-вашему листингу), разные кодировки в разных местах

Цитата(Toyamatokanava @  20.4.2017,  23:07 Найти цитируемый пост)
    int number_command;//для команды 2
    int celoe;//для команды 3
    string *str;//для команды 4
                //Point p[4];//для команды 5


Цитата(Toyamatokanava @  20.4.2017,  23:07 Найти цитируемый пост)

void first_command::Treatment(data_struct *d)//обработка информации, здесь нужно собрать инфу о всех командах
{


В студии, (если вы пишете в ней), все должно выглядеть нормально, т.е. везде нормальные русские буквы, в комментариях в том числе.
А она походу не понимает вашу кодировку.

PM MAIL   Вверх
Toyamatokanava
Дата 21.4.2017, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(volatile @ 21.4.2017,  16:38)
Вы сначала наведите порядок с своих исходниках
У вас в одном файле (судя по-вашему листингу), разные кодировки в разных местах

Цитата(Toyamatokanava @  20.4.2017,  23:07 Найти цитируемый пост)
    int number_command;//для команды 2
    int celoe;//для команды 3
    string *str;//для команды 4
                //Point p[4];//для команды 5


Цитата(Toyamatokanava @  20.4.2017,  23:07 Найти цитируемый пост)

void first_command::Treatment(data_struct *d)//обработка информации, здесь нужно собрать инфу о всех командах
{


В студии, (если вы пишете в ней), все должно выглядеть нормально, т.е. везде нормальные русские буквы, в комментариях в том числе.
А она походу не понимает вашу кодировку.

Да, спасибо. Я разобрался), оказывается исходник был в utf  кодировке.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1100 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.