Erreur lors de la conversion de nombres en texte

J’écris un programme c ++ qui convertit les nombres en texte.

J’ai deux problèmes (éditer: juste un maintenant):

  • Le premier problème est que le programme n’écrit que les chiffres 1 à 19 corrects, tout ce qui va de 20 à 99, comme lorsque j’écrivais 34 comme exemple, le nombre de réponses que j’obtenais est de trente et pas trente comme il se doit. Après trente ans, il ne rest que des erreurs et le programme s’arrête. [Problème résolu]

  • Le deuxième problème est que je voudrais pouvoir écrire des nombres compris entre 0 et 999, et pas seulement 99, mais je ne sais pas comment faire.

    #include  #include  using namespace std; int main() { int num, Ldight, Rdight; ssortingng ones[] = {"zero", "one", "two", "three", "four", "five","six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; ssortingng tens[] = {"twenty","thirty","fourty","fifty", "sixty","seventy","eighty", "ninety"}; cout <> num; if(num <= 0) { cout << "ERROR!" <= 0 && num <= 19) { cout << "Your number is: " <=20 && num <=99) { Rdight = num % 10; Ldight = num / 10; cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight]; } return 0; } 

Vous devriez changer ceci:

 cout << "Your number is: " << tens[Ldight - 2] << ones[num]; 

À

 cout << "Your number is: " << tens[Ldight - 2] << ones[Rdight]; 

Vous calculez une valeur que vous n'utilisez jamais. Et aussi dans la ligne ci-dessus ones num accède à l'index en dehors des limites.

Pour votre première question, votre problème est dans cette ligne:

 cout << "Your number is: " << tens[Ldight - 2] << ones[num]; 

Vous utilisez la mauvaise variable, même si vous calculez correctement la valeur dans les lignes juste au-dessus. Je ne vous dis pas comment résoudre ce problème, vous êtes le seul à apprendre la programmation et vous devez apprendre à détecter ce type de problème.

[Personnellement, j'appendais deux champs factices à "dizaines", de sorte que vous n'avez pas à faire -2 aussi - c'est un petit prix à payer].

En ce qui concerne votre deuxième problème, vous devrez réfléchir à la façon dont vous allez le dire et vous proposerez probablement quelque chose ... Ce n'est pas très différent de résoudre un chiffre, par exemple. Si vous avez besoin de plus d’une demi-douzaine de lignes environ, vous ne résolvez pas le problème.

Et une fois que vous aurez résolu des centaines de problèmes, il sera très simple d’append des nombres allant jusqu’à des millions, voire plus, avec seulement quelques lignes de code en plus.

Utilisez la ligne suivante:

cout << "Votre numéro est:" << dizaines [Ldigit - 2] << ones [ Rdigit-1 ];

L’élément “zéro” dans les unités [] n’est pas nécessaire puisque vous indiquez comme erreur lorsque i / p <= 0, supprimez donc l'élément “zéro”.

Vous pouvez essayer de scinder la saisie utilisateur en 2 morceaux. Si la saisie utilisateur est: 55, vous la divisez en 5 et 5, puis vous imprimez

des dizaines [5] + des [5]

Ce serait une bien meilleure solution. Vous supprimerez tous les if-s pouvant causer des problèmes