Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Помогите "подружить" Borland C++3.1 и WINDOWS XP.
Посл.ответ Сообщение

Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 30 декабря 2006 23:50
· Личное сообщение · #1

Начал изучать С++ по книге Лаптева "С++ для начинающих". В книге вместе с обучением разбираются примеры для Borland C++3.1. Вопрос такой: почему почему после компиляции исходника с русским текстом Винда открывает прогу в которой вместо русских букв козябры сплошные? Проги работают, ошибок нет, а с кодировкой беда. Если кто может- разъясните, только поподробнее т.к. я еще новичек.



Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 декабря 2006 00:01 · Поправил: alexey_k
· Личное сообщение · #2

там проблема с кодировкой, ДОС и Вин кодировки (кирилица) отличаются...
Набери исходник, например, в Bred 2 (заменитель блокнота) и сохрани как файло с Дос (OEM)-кодировкой, всё будет ок!

ЗЫ
Bred - только для примера.
Можно юзать UltraEdit, AkelPad и т.д.

Но мне больше всего Bred нравицо. ИМХО



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 31 декабря 2006 00:11
· Личное сообщение · #3

А ещё можно при помощи WinAPI функций:

#include <windows.h>
char buf[255];

int main()
{

CharToOem("Русскоязычный текст",buf);
cout << buf;

return 0;
}

-----
все багрепорты - в личные сообщения




Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 31 декабря 2006 00:15
· Личное сообщение · #4

HandMill

а в Borland C++3.1 - "Windows.h" есть.
действительно не знаю, не кодил в нём никогда...



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 31 декабря 2006 00:19
· Личное сообщение · #5

Ну я старенький 5.1 юзал когда-то ... там был. И в 3.1 должен быть. Мне очень нравился 5.1 я вообще его всем начинающим рекомендую, так как в нём есть всё самое необходимое для новичков(сам на нём учился)

-----
все багрепорты - в личные сообщения




Ранг: 5.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 31 декабря 2006 00:26 · Поправил: 452
· Личное сообщение · #6

Я користуюсь спеціальною утилітою знайдеш в аттачі.
А якщо не допоможе виправ в реєстрі
HKLMSYSTEMCurrentControlSetControlKeyboard LayoutDosKeybCodes
SetValue "00000409"="ru"
та
HKLMSYSTEMCurrentControlSetControlNlsCodePage
SetValue "1250"="c_1251.nls"
HKLMSYSTEMCurrentControlSetControlNlsCodePage
SetValue "1252"="c_1251.nls"

a7d5_31.12.2006_CRACKLAB.rU.tgz - RusLang.rar



Ранг: 5.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 31 декабря 2006 00:32
· Личное сообщение · #7

HKLM++SYSTEM++CurrentControlSet++Control++Keyboard Layout++DosKeybCodes
SetValue "00000409"="ru"
та
HKLM++SYSTEM++CurrentControlSet++Control++Nls++CodePage
SetValue "1250"="c_1251.nls"
HKLM++SYSTEM++CurrentControlSet++Control++Nls++CodePage
SetValue "1252"="c_1251.nls"
++ замість слеш щось на сайті слеш \\ \ не показує



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 31 декабря 2006 01:22
· Личное сообщение · #8

а можно и самому функцию накатать которая будет перекодировать.....от силы строк 10 понадобится кода



Ранг: 5.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 31 декабря 2006 12:08
· Личное сообщение · #9

Ну и ... что работает или нет ???????????????



Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 07 января 2007 03:53
· Личное сообщение · #10

Всем большое спасибо за подсказки! Начну по порядку. Трюк с набором исходника в отдельном от среды редакторе прокатывает, но это такой геморрой! Функция WinAPI средой не определяется, компилятор выдает ошибку. Реестр не правил поскольку в этом не силен. Файлы от 452 ничего не изменили. Так что головняк остался. Попробовал другой компилятор DEV C++, у него такая же хрень. Ввод русского текста без проблем, а вывод в окне при запуске
проги корявый.



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 января 2007 04:48
· Личное сообщение · #11

На мой взгляд хоршее решение - установить DosBox.
DosBox - программа эмулятор Dos'а, после установки следует настроить файл конфигурации dosbox.conf который будет находиться в директории куда проинсталлирован DosBox. Для ускорения просто установи значения параметров в этом файле:
fullscreen=false
autolock=false
frameskip=3
core=dynamic
cycles=auto
Подключи с помощью следующей команды диск g: (в том же файле)
mount g D:
В результате после запуска получишь настоящий Dos.
Далее загружаешь любой русификатор keyrus.com к примеру, а затем уже С++.
Все должно быть в порядке.



Ранг: 60.4 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 07 января 2007 05:36
· Личное сообщение · #12

rigger, в реестр и не лезь - досовские программы, к которым относится эта версия С++, там ничего не держат. Программы с API хоть и можно компилить в ней, но это полный изварт. А теперь по теме...

Запускай С++ из под Far'а. Только перед запуском переключись на русский язык. Тогда в C++ русский тоже будет доступен, правда до первой компиляции. По-моему это приемлемо.



Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 07 января 2007 07:34
· Личное сообщение · #13

А что касаемо реестра: изменение значений 1250 и 1252 не затронет другие русскоязычные проги в системе? И еще: на одном форуме советуют менять 1252, а о 1250 ни слова. Может кто подскажет как правильно?
PS Борланд я пока оставил в покое, тыкаюсь в DEV C++.



Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 08 января 2007 04:12
· Личное сообщение · #14

И малый вопросик: как быть если по умолчанию значения этих параметров уже установлены так, как мне рекомендуют, а ни фига не срабатывает?



Ранг: 6.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 января 2007 23:48
· Личное сообщение · #15

может не фтему нно все равно, почему все досовские проги жутко грузят проц, втом числе и С++, комп аж,бывает, тормозит?



Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 09 января 2007 05:40
· Личное сообщение · #16

И последний вопрос: если никто не может подсказать как править реестр, то может кто подскажет как переписать исходник с использованием WinAPI
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int main (int nNumberofArgs, char* pszArgs[])
{
//Введите температуру в градусах цельсия
int celsius;
cout<<"Введите температуру по Цельсию:";
cin>>celsius;
//для приведенной формулы преобразования
//вычислим преобразующий множитель
int factor;
factor=212-32;
//используем......
int fahrenheit;
fahrenheit=factor*celsius/100+32;
//вывод результатов
cout<<Температура по Фаренгейту:";
cout<<fahrenheit;
return 0;
}
Может не совсем корректно, но вроде так.



Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 09 января 2007 05:48
· Личное сообщение · #17

rigger пишет:
вместо русских букв козябры


chcp 1251 в консоли перед запуском программы
по дефолту 866




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 09 января 2007 05:51
· Личное сообщение · #18

Насчет алгоритма не знаю, но

cout<<"Введите температуру по Цельсию:";
Заменяется на
puts("Введите температуру по Цельсию:");
либо
printf("Введите температуру по Цельсию:");

cin>>celsius;
на
scanf("%d", &celsius);

Не апи, но уже не так абстрактно.



Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 09 января 2007 07:00
· Личное сообщение · #19

Freecod пишет:
chcp 1251 в консоли перед запуском программы
по дефолту 866

А на пальцах можно, а то я новичок и никак не врублюсь в эту борьбу с реестром.



Ранг: 10.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 10 января 2007 06:35
· Личное сообщение · #20

Кроче всем спасибо! Проблему придется решать самому. И на последок совет новичкам: если хотите увидеть результат работы своей программы, прежде чем закроется окно, наберите перед return o; system("PAUSE");. Эту фишку я обнаружил только в одной книге. В других книгах о программировании об этом нет ни слова. На этом тему закрываем.


 eXeL@B —› Программирование —› Помогите "подружить" Borland C++3.1 и WINDOWS XP.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати