Я хотел бы создать программу C, которая просит пользователя ввести число меньше 100, а затем вывести его в форме слова. Например, вход может быть «53», а я бы хотел, чтобы на выходе было «пятьдесят три». И если ввод - это число, равное или большее 100 (длина строки> = 3), я бы хотел, чтобы вывод был сообщением об ошибке. Пример: ввод - «132», а вывод - «ошибка: число больше или равно 100». Я использовал статью geeksforgeeks (https://www.geeksforgeeks.org/convert-number-to-words/) в качестве руководства, поскольку в учебнике учитываются числа меньше 10000, но я хотел бы учитывать только числа меньше 100. Это мой код. :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void convertnumtostring(char *num){
int len = strlen(num);
if(len==0){
fprintf(stderr, "empty string\n");
return;
}
if(len>2){
fprintf(stderr, "number is is equal to or greater than 100\n");
return;
}
char *singledig[]={"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
char *doubledig[]={"", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
char *multiplesoften[]={"", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
printf("\n%s: ", num);
if(len==1){
printf("%s\n", singledig[*num - '0']);
return;
}
while(*num != '0'){
if(*num == '1'){
int sum = *num - '0' + *(num + 1)- '0';
printf("%s\n", doubledig[sum]);
return;
} else if(*num == '2' && *(num + 1) == '0'){
printf("twenty\n");
return;
} else {
int i = *num - '0';
printf("%s ", i? multiplesoften[i]: "");
++num;
if(*num != '0')
printf("%s ", singledig[*num - '0']);
}
++num;
}
}
int main(void){
char input[10];
printf("Enter a number: ");
scanf("%s", input);
convertnumtostring(input);
return 0;
}
Код работает так, как я хотел бы для чисел больше 99 / длины строк больше 3 (100, 1313, 13235, и т.д. c.), Потому что они получают желаемое сообщение об ошибке и для чисел 0-20 выводится правильная форма слова (ноль, четыре, двадцать и т. д. c.), но для всех других чисел 21-99 я получаю сообщение, в котором говорится:
Segmentation fault (core dumped)
Любая помощь будет быть оцененным. Я хотел бы знать, что это за ошибка сегментации, где / почему она возникает и как ее исправить.