Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
interesno2111
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 5
#1

опять о шрифтах - C++

02.07.2010, 20:20. Просмотров 2891. Ответов 21
Метки нет (Все метки)

приветствую. Имеется программа из учебника:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <clocale>;
using namespace std;
int main() {
    setlocale(LC_ALL, "Russian");
    double fahr, cels;
    cout << endl << "ВВедите температуру по Фаренгейту" << endl;
    cin >> fahr;
    cels=5/9*(fahr-32);
    cout << "По Фаренгейту: " << fahr << "По Цельсию: " << cels <<endl;
    return 0;
}
Однако, после выполнения результат - квазябра, типа иероглифы.
Что сделано неправильно? я вот - не знаю.
Может кто в курсе? Сообщите, если не лень.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2010, 20:20     опять о шрифтах
Посмотрите здесь:

Опять static - C++
Есть два файла. ////////////////////////////////////// //main.cpp class SomeClass { public: SomeClass(REC*...

Опять файлы - C++
Если, я открыл файл записал туда данные, а потом пытаюсь читать эти данные до тех пор пока не встретится конец файл. Это будет корректно?...

Опять танки :D - C++
Сами танки я нарисовал, нашел алгоритм который просчитывает столкновение снаряда и танка ,преграды нарисовал ) танк уже двигается Не...

Опять текстуры - C++
Я,наверное,всех уже достал с текстурами)Но всё же вот фрагменты кода рисовка цилиндра с текстурой glEnable(GL_TEXTURE_2D); barkn=0; ...

опять же строки - C++
в общем дана строка состоящая из слов разделенных пробелами, нужно поменять местами первое и последнее слова и вывести получившуюся строку...

Опять интегралы.... - C++
Написать программу для вычисления значения определенного интеграла вида с заданной точностью R=0.0001. Для вычислений используется...

матрица опять ( - C++
В данной действительной квадратной матрице порядка n, найти наибольший по модулю элемент. Получить квадратную матрицу порядка n - 1 путем...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.07.2010, 20:30     опять о шрифтах #2
На Dev-C++ сетлокал не работает, используйте другие способы, например CharToOem
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
02.07.2010, 20:47     опять о шрифтах #3
M128K145, CharToOem требует *char, а если мне надо string перевести?

Добавлено через 1 минуту
нужно заводить отдельную переменную и в в нее переводить?
C++
1
2
3
string str;
char *res=str.c_str();
CharToOem(res,res);
так?
interesno2111
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 5
02.07.2010, 20:51  [ТС]     опять о шрифтах #4
Цитата Сообщение от M128K145 Посмотреть сообщение
На Dev-C++ сетлокал не работает, используйте другие способы, например CharToOem
А чем можно пользоваться чтобы сетлокол работал? (про CharToOem - спасибо)
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
02.07.2010, 20:58     опять о шрифтах #5
Цитата Сообщение от interesno2111 Посмотреть сообщение
А чем можно пользоваться чтобы сетлокол работал? (про CharToOem - спасибо)
Visual Studio
interesno2111
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 5
02.07.2010, 21:08  [ТС]     опять о шрифтах #6
И все?
Mog
0 / 0 / 1
Регистрация: 18.01.2010
Сообщений: 14
02.07.2010, 21:15     опять о шрифтах #7
Цитата Сообщение от besstiaa Посмотреть сообщение
Visual Studio
Там тоже у меня не пашет, или я что-то не так делаю?)
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
02.07.2010, 21:23     опять о шрифтах #8
Цитата Сообщение от Mog Посмотреть сообщение
Там тоже у меня не пашет, или я что-то не так делаю?)
Всё работает. VS 2008
interesno2111
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 5
02.07.2010, 22:10  [ТС]     опять о шрифтах #9
Цитата Сообщение от PointsEqual Посмотреть сообщение
M128K145, CharToOem требует *char, а если мне надо string перевести?

Добавлено через 1 минуту
нужно заводить отдельную переменную и в в нее переводить?
C++
1
2
3
string str;
char *res=str.c_str();
CharToOem(res,res);
так?
.

т.е. строковые литералы заводить как переменную?
а если их в программе много?
easybudda
Эксперт CЭксперт С++
9468 / 5481 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
02.07.2010, 22:40     опять о шрифтах #10
Цитата Сообщение от PointsEqual Посмотреть сообщение
CharToOem(res,res);
так в принципе работать не будет - std::string::c_str() возвращает указатель на константную строку.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
02.07.2010, 22:49     опять о шрифтах #11
извиняюсь, вот так работает

C++
1
2
3
4
string str="абвгд";
char *res;
CharToOem(str.c_str(),res);
cout<<res;
но вопрос вот в чем - чтобы перевести string нужно создавать дополнительную переменную(res)? а без нее нельзя никак?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.07.2010, 22:55     опять о шрифтах #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include "cp866.h"
 
int main()
{
   std::locale rus(std::locale(), new cp866()); // 1
   std::ios_base::sync_with_stdio(false);       // 2
   
   std::cout.imbue(rus);                        // 3
 
   std::string str = "абвгд";
   std::cout << str << std::endl;
 
   return 0;
}
1. Где-то прочитал, что в большинстве реализаций не существует, как таковых нестандартных локал-объектов (кроме POSIX-locale), так что в качестве выхода необходимо применить свою реализацию. Примерную реализацию можно посмотреть здесь
cpp866.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#pragma once
 
#include <windows.h>
 
class cp866 : public std::codecvt <char, char, std::mbstate_t> {
public:
   explicit cp866 ( size_t r = 0 ) : std::codecvt <char, char, std::mbstate_t> ( r ) {}
 
protected:
   result do_in ( state_type&, const char* from, const char* from_end, const char*& from_next, char* to, char*, char*& to_next ) const {
      const int size = from_end - from;
      ::OemToCharBuff ( from, to, size );
 
      from_next = from + size;
      to_next = to + size ;
 
      return ok;
   }
 
   result do_out ( state_type&, const char* from, const char* from_end, const char*& from_next, char* to, char*, char*& to_next ) const {
      const int size = from_end - from;
      ::CharToOemBuff ( from, to, size );
 
      from_next = from + size;
      to_next = to + size ;
 
      return ok;
   }
 
   result do_unshift ( state_type&, char*, char*, char*& ) const { return ok; }
   int do_encoding () const throw () { return 1; }
   bool do_always_noconv () const throw () { return false; }
 
   int do_length ( state_type& state, const char* from, const char* from_end, size_t max ) const {
      return std::codecvt <char, char, std::mbstate_t>::do_length ( state, from, from_end, max );
   }
 
   int do_max_length () const throw () {
      return std::codecvt <char, char, std::mbstate_t>::do_max_length ();
   }
};

2. Выключение синхронизации locale с stdio. В принципе у меня локаль работает и без этой строки, но все может быть.
3. Установка связки "локаль-поток", понятное дело что связывать надо только нужные потоки.

вроде бы все. способ чудесно работает для всех видов ввода и вывода
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
02.07.2010, 22:58     опять о шрифтах #13
Цитата Сообщение от fasked Посмотреть сообщение
#include "cp866.h"
у меня не находит такой, аа вон он) увидел
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.07.2010, 23:01     опять о шрифтах #14
Цитата Сообщение от PointsEqual Посмотреть сообщение
у меня не находит такой, аа вон он) увидел
да-да, содержимое находится под катом, в заголовке лежит класс локали, который для красоты главного файла был туда и спрятан собственно
кстати, реализация опять же под windows, потому что использовать самописанные chartooem и oemtochar не хочется, к тому же в остальных системах вроде бы с выводом все в порядке.
В общем-то я думаю, что держать где-то наготове один заголовочный-файлик + написание лишних трех строк, всегда проще, чем использовать CharToOem и обратное преобразование. К тому же метод расширяем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2010, 23:39     опять о шрифтах
Еще ссылки по теме:

Опять ошибка - C++
Идет ошибка сегментации, а я в программировании не так силен, понять не могу в чем проблема... (+ Выдает ошибки, когда количество...

Опять указатели - C++
Здравствуйте. Изучаю эти туториалы: http://www.rastertek.com/dx11tut03.html В конце есть упражнение: конфигурацию видеокарты вывести в...

опять строки - C++
Здравствуйте!Помогите пожалуйсте))Никак не получаются задачи на строки.Задача:выяснить распределение слов по длине(сколько слов,состоящих...

Опять завал!!! - C++
Данна матрица А нужно переписать ее в матрицу В так, чтобы сначала были все положительные числа, а потом все отрицательные, матрицу задать...

Опять конструкторы - C++
допустим есть два класса. template &lt;typename T = int&gt; class SkillBase { public: // cd SkillBase(T val = 0) : m_value(val) {} ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
interesno2111
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 5
02.07.2010, 23:39  [ТС]     опять о шрифтах #15
Да-а-а.
Ну а в итоге, как должна выглядеть моя начальная программа, чтобы после выполнения она была читаема? Или это некорректный вопрос?
Yandex
Объявления
02.07.2010, 23:39     опять о шрифтах
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru