Ошибка сегментирования. Перевод числа в строковый эквивалент - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. Вот и столкнулся я с проблемой которая требует от меня просить помощь у более опытных людей ) В общем, есть код который переводит число в его строковый эквивалент. Программа была написана мной на плюсах и отлично работала, но когда возникла нужда переписать все на си - возникли трудности. Код написан коряво, так что если есть что поправить - не стесняйтесь =)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
void FormString(int num);
int razryad(int num);
char *ResultString(int numeric);
 
int main()
{
    int num;
    printf("Введите число: ");
    scanf("%d", &num);
    printf("Введено: %d \n", num);
    FormString(num);
    return 0;
}
 
void FormString(int num)
{
    char *Razryadi[] = { " ","thousands ", "millions ", "billions "};
    int raz, divisor, bufnum;
    char *s1=" ";
    char *ps=" ";
    raz = razryad(num);
    for (raz; raz > -1; raz--)
    {
        divisor = pow((double)1000, (double)raz);
        bufnum = num/divisor;
        s1= ResultString(bufnum);
        num = num%divisor;
        strcat(s1, Razryadi[raz]);
        printf("%s",s1);
    }
    printf("\n");
}
 
int razryad(int num)
{
    int raz;
    for (raz=0; num/1000 > 0; raz++)
        {
            num=num/1000;
        }
    return raz;
}
 
char *ResultString(int numeric)
{
    char *Hundreds[] = {" ", "hundreed "};
    char *Tens [] = {"","", "twenty ", "thirsty ", "fourty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "};
    char *Ones [] = {"", "one ","two ","three ","four ","five ","six ","seven ","eight ","nine ","ten ", "eleven ","twelve ","thirsteen ",
    "fourteen ","fiveteen ","sixteen ","seventeen ","eighteen ","nineteen "};
    char *Minus [] = {"", "minus"};
    int hund, tens, ones;
    char *shund = " ";
    char *stens = " ";
    char *sones = " ";
    char *RString = " ";
    char *mins = " ";
    if (numeric < 0) {mins = Minus[1]; numeric= -numeric;}
 
        hund = numeric/100;
        numeric = numeric%100;
        tens = numeric/10;
        numeric = numeric%10;
        ones = numeric;
        if (tens ==1)
        {
            ones = ones + 10;
            tens = 0;
        }
        if (hund < 1)
        {
            shund = Ones[hund];
            strcat(shund, Hundreds[0]);
        }
        else
        {
            shund = Ones[hund];
            strcat(shund, Hundreds[1]);
        }
        stens = Tens[tens];
        sones = Ones[ones];
        strcpy(RString, mins);
        strcat(RString, shund);
        strcat(RString,stens);
        strcat(RString, sones);
 
    return RString;
}

Решение задачи: «Ошибка сегментирования. Перевод числа в строковый эквивалент»

textual
Листинг программы
char Sigh[] = "минус";
    char *ptria[4], tria[] = "//тысяч$а%и/мE#ов%а/бE#ов%а";
    char triaGen[] = "#$##";
    char triaVar[] = "#$%%%#####";
    char *phuns[10], huns[] = "//Fо/GеFи/3Fа/4еFа/5ьA/6ьA/7ьA/8ьA/9ьA";
    char *ptens[10], tens[] = "///GаB/3B/сорок/5ьC/6ьC/7ьC/8ьC/HвяноFо";
    char *pones[20], ones[] = "//1/2/3/4е/5ь/6ь/7ь/8ь/9ь/Hсять/одинD/GеD/3D/4D/5D/6D/7D/8D/9D";
    char *ptz[20], tz[] = "//од#ин$на/дв#а$е/три/четыр/пят/шест/сем/восем/девят/сот/дцать/десят/надцать/иллион/ст/дв/де";

Объяснение кода листинга программы

  1. Объявляются массивы символов: Sigh[] = минус, tria[] = //тысяч$а%и/мE#ов%а/бE#ов%а, triaGen[] = #$##, triaVar[] = #$%%%#####, huns[] = //Fо/GеFи/3Fа/4еFа/5ьA/6ьA/7ьA/8ьA/9ьA, tens[] = ///GаB/3B/сорок/5ьC/6ьC/7ьC/8ьC/HвяноFо, ones[] = //1/2/3/4е/5ь/6ь/7ь/8ь/9ь/Hсять/одинD/GеD/3D/4D/5D/6D/7D/8D/9D, tz[] = //од#ин$на/дв#а$е/три/четыр/пят/шест/сем/восем/девят/сот/дцать/десят/надцать/иллион/ст/дв/де.
  2. Создаются указатели на массивы: char ptria[4], char ptens[10], char pones[20], char ptz[20].
  3. Задаются значения переменных: Sigh[0] = 'м', tria[0] = '//', triaGen[0] = '#', triaVar[0] = '#', huns[0] = 'F', tens[0] = 'G', ones[0] = '1', tz[0] = 'о'.
  4. Переменные Sigh, tria, triaGen, triaVar, huns, tens, ones, tz используются в дальнейшем коде.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы