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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 12:31   #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;
}
ТриСемёрки вне форума Ответить с цитированием
Старый 12.05.2010, 13:28   #2
Neurogenus
Заблокирован
 
Регистрация: 05.05.2010
Сообщений: 40
По умолчанию

Цитата:
if (*p>=192) // здесь русская буква
if ((*p)<=239) // А, Б, ... Я, а, б, ... п
и
Цитата:
// преобразует ANSI-строку в строку ASCII
теперь догадайтесь почему(?)
Neurogenus вне форума Ответить с цитированием
Старый 12.05.2010, 22:12   #3
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию

Спасибо всем, кто попытался помочь!

char* rus(char* str) {
unsigned char *p=NULL;
char *str2="";
strcpy(str2,str);
p=str2;
/* при объявлении символов как char русские буквы
кодируются отрицательными числами */
while (*p) {
if (*p>=192) // здесь русская буква
if ((*p)<=239) // А, Б, ... Я, а, б, ... п
(*p)=(*p)-64;
else // p ... я
(*p)=(*p)-16;

p++;
}
return str2;
}
ТриСемёрки вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает "русификатор" ТриСемёрки C++ Builder 3 12.05.2010 12:56
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай 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