Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 16

Неправильный вызов функции char* arab2roman(unsigned short int arab) арабские в римские

02.12.2019, 18:36. Показов 1586. Ответов 1

Студворк — интернет-сервис помощи студентам
В общем, нужно было переводить арабские цифры в римские символы. На википедии нашел следующий код:

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
char* arab2roman(unsigned short int arab) {
    const int   arabar[] = { 1,   4,    5,   9,    10,  40,  50,   90,  100, 400,  500, 900,  1000 };
    const char* romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
    static char roman[80];
    const int m = sizeof(arabar) / sizeof(int) - 1, arabmax = arabar[m];
    const char romanmax = romanar[m][0];
    int i, n;
    if (!arab) {
        *roman = 0;
        return roman;
    }
    i = 0;
    while (arab > arabmax) {
        roman[i++] = romanmax;
        arab -= arabmax; 
    }
    n = m;
    while (arab > 0) {
        if (arab >= arabar[n]) {
            roman[i++] = romanar[n][0];
            if (n & 1)
                roman[i++] = romanar[n][1];
            arab -= arabar[n];
        }
        else
            n--;
    }
    roman[i] = 0;
    return roman;
}
Как правильно вызывать эту функцию? Я пытался следующим образом:

C
1
2
3
4
5
6
void GetRom() 
{
char number[80];
number = arab2roman(8);
printf("\n %c \n", number);
}
Но в таком случае выдавало ошибку c2106 левый операнд должен быть левосторонним значением

я попробовал поставить указатель, ведь в функции arab2roman в отдаваемом значении он есть

C
1
*number = arab2roman(8);
После этого компилятор стал запускаться, но результат выдает абсолютно непонятный, а именно рандомные русские буквы..
Как это можно исправить?

Добавлено через 52 минуты
заметил, что вывожу %c, а не %s
поменял, вместо рандомных русских букв стало выводить это:

8МММММММММММММММММММММММММММММММММММММММ ММММММММММММММММММММММММММММММММММММММММ ММММММММ
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2019, 18:36
Ответы с готовыми решениями:

Размер для данных (int, char, long, double, short, unsigned, float)
Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию (о...

Определение диапазонов переменных типов char, short, int и long (как signed, так и unsigned)
Вроде до этого все читал внимательно, задание понимаю, как реализовать - не знаю. С только начал изучать :)

Разница int, short, unsigned int, unsigned short
Есть например цикл который проходит по массиву в котором 100 элементов. В чем практическая выгода и разница в истоьзовании типов short,...

1
 Аватар для analogov net
2524 / 1123 / 493
Регистрация: 17.11.2018
Сообщений: 2,832
02.12.2019, 21:20
Лучший ответ Сообщение было отмечено Mialso как решение

Решение

так попробуй:
C
1
2
3
4
5
int main()
{
    char* rom = arab2roman( 8 );
    printf("%s\n",  rom);
}
Добавлено через 2 минуты
или так:
C
1
2
3
4
5
6
7
8
void GetRom()
{
    printf( "%s\n", arab2roman( 8 ) );
}
int main()
{
    GetRom();
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2019, 21:20
Помогаю со студенческими работами здесь

Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию
1. Какие типы данных лучше всего использовать для хранения следующих значений: а) возраст человека в текущем году; б) вес человека в...

Преобразование unsigned short в unsigned char
Как можно преобразовать unsigned short в unsigned char ?

Конвертация из const char* в unsigned short
Кто поможет перевести из const char* в unsigned short допустим получаю из файла строку числовую("4") вот ее надо перевести в...

Error C2040:strnset_2:"char *(char *,int,unsigned int)" отличается по уровням косвенного обращения от "int ()"
Не могу найти в чём ошибка. error C2040: strnset_2: "char *(char *,int,unsigned int)" отличается по уровням косвенного обращения от...

Определить, можно ли представить число, заданное строкой, в форме unsigned short int
Здравствуйте! Нужна помощь по задаче со строками! Не имею ни малейшего понятия, в каком виде должно быть это число в строке, как его найти...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru