2014-12-08 3 views
-1

Этот код дает ошибку сегментации, который мне поможет в обнаружении ошибки.Печать числа в слова. Я написал эту программу. Но я получаю ошибку сегментации

#include<stdio.h> 

void main() 
{ 
    char *single_numbers[10] = 
    { 
     "","one","two","three","four","five" 
     ,"six","seven","eight","nine" 
    }; 
    char *tens_numbers[8] = 
    { 
     "twenty","thirty","fourty","fifty" 
     ,"sixty","seventy","eighty","ninety" 
    }; 
    char *teens[9] = 
    { 
     "eleven","twelve","thirteen","fourteen" 
     ,"fifteen","sixteen","seventeen" 
     ,"ëighteen","nineteen" 
    }; 
    int number,thousands,hundreds,tens,units,temp; 
    printf("enter the number"); 
    scanf("%d",&number); 
    thousands=number/1000; 
    hundreds=(number%1000)/100; 
    temp=(number%100); 
    tens=temp/10; 
    units=number%10; 
    if(temp>=20) 
     printf("%sthousand %shundred %s%s" 
      ,*single_numbers[thousands] 
      ,*single_numbers[hundreds] 
      ,*tens_numbers[tens - 2] 
      ,*single_numbers[units]); 
    else 
     printf("%sthousand %shundred %s" 
      ,*single_numbers[thousands] 
      ,*single_numbers[hundreds] 
      ,*teens[temp - 10]); 
} 
+1

Пожалуйста, попробуйте форматировать свой код, чтобы он был более читабельным. – StephenTG

+0

Используйте [valgrind] (http://valgrind.org), который поможет вам найти ваш segfault. – Evert

+0

Что случилось с «десятью»? – Evert

ответ

2

Не разыгрывать single_numbers[thousands] и так далее. Это уже char*, если вы их разыскиваете, вы делаете их char, но printf ожидает char*, поэтому он деферирует данный char, что приводит к segfault.

+0

но как я могу объявить массив строк? – user218324

+0

http://stackoverflow.com/questions/1088622/how-do-i-create-an-array-of-strings-in-c – flyx

+0

const char * a [2] = {"blah", "hmm"} ; это дано в качестве юридического заявления. Так что все, что я написал, должно быть законным. – user218324

Смежные вопросы