Mon programme convertit un entier dans un nombre littéral. Il fonctionne avec précision avec des nombres supérieurs à (-9999) ou des nombres inférieurs à 9999 mais chaque fois que je tape 12314115151 en tant qu'utilisateur, le programme imprime un "négatif". Je pense que je l'ai fait une erreur dans mon code et besoin de votre aide ..Résultat inattendu avec intégrateur
Voici mon code:
#include <stdio.h>
#include <conio.h>
void positive(int input, int t);
void negative(int input, int t);
void main(){
int input,t;
clrscr();
textcolor(YELLOW);
cprintf("ENTER YOUR NUMBER: ");
scanf("%i",&input);
if (input < -9999 || input > 9999){
textcolor(RED);
cprintf("\nINVALID ENTRY, PROGRAM TERMINATED");
}
else if(input == 0){
cprintf("\nNUMBER IN WORD(S): ");
printf("Zero");
}
else if(input < 0 || input >-10000){
cprintf("\nNUMBER IN WORD(S): ");
negative(input,t);
}
else if(input > 0 || input <10000){
cprintf("\nNUMBER IN WORD(S): ");
positive(input,t);
}
getch();
}
void positive(int input, int t){
char* a[11]={"","One","Two","Three","Four","Five","Six","Seven","Eeight","Nine","Ten"};
char* b[10]={"","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
char* c[10]={"","","Twenty","Thirty","Fourty","Fifty","Sixty","Seventy","Eighty","Ninety"};
textcolor(WHITE);
if(input > 0 || input < 11){
t=input/1;
cprintf("Positive %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf("Positive %s",b[t]);
}
if (input > 19 || input < 100){
t = input/10;
cprintf("Positive %s",c[t]);
t=input%10;
cprintf(" %s",a[t]);
}
if (input > 99 || input < 1000){
t =input/100;
cprintf("Positive %s Hundred",a[t]);
t*=100;
input-=t;
if(input > -1 || input < 11){
t=input/1;
cprintf(" and %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf(" and %s",b[t]);
}
if (input > 19 || input < 100)
{
t=input/10;
cprintf(" and %s",c[t]);
input=input%10;
cprintf(" %s",a[input]);
}
}
if(input >999 || input <10000){
t=input/1000;
cprintf("Positive %s Thousand",a[t]);
t*=1000;
input-=t;
if(input > -1 || input < 11){
t=input/1;
cprintf(" and %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf(" and %s",b[t]);
}
if (input > 19 || input < 100)
{
t=input/10;
cprintf(" and %s",c[t]);
input=input%10;
cprintf(" %s",a[input]);
}
if(input > 99 || input < 1000){
t=input/100;
cprintf(" %s Hundred",a[t]);
t*=100;
input-=t;
if(input > -1 || input < 11){
t=input/1;
cprintf(" and %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf(" and %s",b[t]);
}
if (input > 19 || input < 100)
{
t=input/10;
cprintf(" and %s",c[t]);
input=input%10;
cprintf(" %s",a[input]);
}
}
}
return;
}
void negative(int input, int t){
char* a[11]={"","One","Two","Three","Four","Five","Six","Seven","Eeight","Nine","Ten"};
char* b[10]={"","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
char* c[10]={"","","Twenty","Thirty","Fourty","Fifty","Sixty","Seventy","Eighty","Ninety"};
textcolor(WHITE);
input*=-1;
if(input > 0 || input < 11){
t=input/1;
cprintf("Negative|| %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf("Negative %s",b[t]);
}
if (input > 19 || input < 100){
t = input/10;
cprintf("Negative %s",c[t]);
t=input%10;
cprintf(" %s",a[t]);
}
if (input > 99 || input < 1000){
t =input/100;
cprintf("Negative %s Hundred",a[t]);
t*=100;
input-=t;
if(input > -1 || input < 11){
t=input/1;
cprintf(" and %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf(" and %s",b[t]);
}
if (input > 19 || input < 100)
{
t=input/10;
cprintf(" and %s",c[t]);
input=input%10;
cprintf(" %s",a[input]);
}
}
if(input >999 || input <10000){
t=input/1000;
cprintf("Negative %s Thousand",a[t]);
t*=1000;
input-=t;
if(input > -1 || input < 11){
t=input/1;
cprintf(" and %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf(" and %s",b[t]);
}
if (input > 19 || input < 100)
{
t=input/10;
cprintf(" and %s",c[t]);
input=input%10;
cprintf(" %s",a[input]);
}
if(input > 99 || input < 1000){
t=input/100;
cprintf(" %s Hundred",a[t]);
t*=100;
input-=t;
if(input > -1 || input < 11){
t=input/1;
cprintf(" and %s",a[t]);
}
if(input > 10 || input < 20){
t=input%10;
cprintf(" and %s",b[t]);
}
if (input > 19 || input < 100)
{
t=input/10;
cprintf(" and %s",c[t]);
input=input%10;
cprintf(" %s",a[input]);
}
}
}
return;
}
Toutes les idées?
'12314115151' est pas une valeur valide de 32 bits 'int'. –
C'est une répétition massive (ou proche de la répétition) dans le code positif et négatif. Vous devriez concevoir une méthode pour éviter cette répétition, probablement en imprimant la chaîne "Négatif" et en appelant la fonction "positive" avec la valeur absolue du nombre. Cela réduit votre code magnifiquement. D'autres changements algorithmiques sont nécessaires pour le faire fonctionner avec de plus grands nombres, mais une fois que vous avez 0..999 couverts, le reste est une question de répétition avec des multiplicateurs différents, etc. Par exemple, dix et dix mille sont liés, comme est dix mille dix (ou dix mille dix si vous êtes américain). –