Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 12:24   #1
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию Не работает "русификатор"

При работе с С++ Builder 6 столкнулся с проблемой: функция rus вторично не совсем корректно работает:
Код:
#pragma hdrstop

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

//---------------------------------------------------------------------------
char* rus (char* str) ;                             // преобразует ANSI-строку в строку ASCII

#pragma argsused
int main(int argc, char* argv[])    {

	int i;


M1:	printf(rus("Для получения кодового слова, закодированного кодом с повторениями нажмите '1'.\n"));
	printf(rus("Для декодирования вектора нажмите '2'.\n"));
	printf(rus("Для декодирования вектора, с использованием таблицы смежных классов нажмите '3'.\n"));
	printf(rus("Для декодирования векторов ошибок нажмите '4'.\n"));
	printf(rus("Для декодирования векторов ошибок с использованием таблицы смежных классов нажмите '5'.\n"));
	printf(rus("Для выхода из программы нажмите '6'.\n"));
	printf(rus("Введите команду: "));
	scanf("%d", &i);
	switch(i)	 {
		case 6:
			return 1;
		default:    {
			printf(rus("Введена некорректная команда.\n"));
			goto M1;
		}
	}

}

char* rus(char* str)    {
        unsigned char *p=str;
        while (*p)    {
                if (*p>=192)    // здесь русская буква
                        if  ((*p)<=239)   // А, Б, ... Я, а, б, ... п
                                (*p)-=64;
                        else              // p ... я
                                (*p)-=16;
                p++;
        }
        return str;
}

Последний раз редактировалось Stilet; 12.05.2010 в 14:27.
ТриСемёрки вне форума Ответить с цитированием
Старый 12.05.2010, 12:42   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
#include <cstdio>
#include <clocale>

using namespace std;

int main()
{
	setlocale(LC_ALL, "");
	printf("Привет");
	getchar();
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 12.05.2010, 12:56   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

setlocale работает только в MS VS.
Можете глянуть мою более прозрачную и отлаженную наработку на ту же тему: Русские символы в Borland C++ Builder
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 12.05.2010, 12:56   #4
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Проблема в том что указатель р после присваивания берет тот же адрес, что и str после изменения значений в р, значение меняется и в str...
Код:
char* rus(char* str) 
{char *p;
  strcpy(p, str); 
  while (*p) {
  if (*p>=192) // здесь русская буква
  if ((*p)<=239) // А, Б, ... Я, а, б, ... п
  (*p)-=64;
  else // p ... я 
  (*p)-=16;
  p++;
 }
return p;
}
И возвращать нужно было не str, а р...
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Почему не работает Case txt Like "текст1", "текст2" Oooleg Microsoft Office Excel 2 15.07.2009 10:08
"Модель молекулы в газе" подскажите почему не работает? Тёма(C@$pEr) Помощь студентам 4 03.02.2009 20:28