Ошибка сегментирования. Перевод числа в строковый эквивалент - 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[] = "//од#ин$на/дв#а$е/три/четыр/пят/шест/сем/восем/девят/сот/дцать/десят/надцать/иллион/ст/дв/де";
Объяснение кода листинга программы
- Объявляются массивы символов: 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[] =//од#ин$на/дв#а$е/три/четыр/пят/шест/сем/восем/девят/сот/дцать/десят/надцать/иллион/ст/дв/де
. - Создаются указатели на массивы: char ptria[4], char ptens[10], char pones[20], char ptz[20].
- Задаются значения переменных: Sigh[0] = 'м', tria[0] = '//', triaGen[0] = '#', triaVar[0] = '#', huns[0] = 'F', tens[0] = 'G', ones[0] = '1', tz[0] = 'о'.
- Переменные Sigh, tria, triaGen, triaVar, huns, tens, ones, tz используются в дальнейшем коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д