| Squiddi Comune mortale
 
  
 
 Registrato: 12/02/15 17:41
 Messaggi: 1
 
 
 | 
			
				|  Inviato: 12 Feb 2015 17:42    Oggetto: [C]Programma non funziona come dovrebbe |   |  
				| 
 |  
				| Ciao a tutti sto convertendo un programma da C++ a C, ecco qual'è il codice del programma in C++: 
  	  | Codice: |  	  | #include <iostream> #include <stdlib.h>
 #include <string.h>
 
 using namespace std;
 
 const int numGruppi = 3;
 const char *gruppoName[] = { "mila", "milioni" };
 const char *irregular[] = { "mille", "unmilione" };
 
 const char *cifre19[] = {
 "zero",
 "uno",
 "due",
 "tre",
 "quattro",
 "cinque",
 "sei",
 "sette",
 "otto",
 "nove",
 "dieci",
 "undici",
 "dodici",
 "tredici",
 "quattordici",
 "quindici",
 "sedici",
 "diciassette",
 "diciotto",
 "diciannove"
 };
 
 const char *decine[] = {
 "venti",
 "trenta",
 "quaranta",
 "cinquanta",
 "sessanta",
 "settanta",
 "ottanta",
 "novanta"
 };
 
 
 
 bool Cifra ( const char *ch );
 int moveEfondo ( char array[], int size );
 void ConvLetter ( const char cifreIn[], int size );
 
 bool Cifra ( const char *str )
 {
 
 for( ; *str != '\0'; str++)
 {
 if ((*str < 48) || (*str > 57))
 return false;
 }
 
 return true;
 
 
 }
 
 int moveEfondo ( char array[], int size )
 {
 int lungChars = strlen ( array ),
 sposta = (size-1);
 
 if (lungChars < size)
 {
 for (int i=0; i < lungChars; i++)
 {
 array[sposta] = array[((lungChars-1)-i)];
 sposta--;
 }
 
 for (int j=0; j < (size-lungChars); j++)
 array[j] = 48;
 }
 
 if (size < 1)
 return -1;
 
 else return 0;
 }
 
 
 void ConvLetter ( const char cifreIn[], int size )
 {
 
 
 void Centinaia ( int cifre[], int group );
 void Decine ( int cifre[], int group );
 void Gruppi ( int cifre[], int group );
 
 
 int gCifre [numGruppi] = { 0 };
 
 
 
 
 for (int gruppo=(numGruppi-1), copia=0; gruppo >= 0; gruppo--, copia += 3)
 {
 
 
 gCifre[gruppo] = ( (cifreIn[copia]-48)*100 +
 (cifreIn[copia+1]-48)*10 +
 (cifreIn[copia+2]-48) );
 }
 
 
 int zero = 0;
 
 
 for (int chkGroup=(numGruppi-1); chkGroup >= 0; chkGroup--)
 {
 
 if (gCifre[chkGroup] == 0)
 zero++;
 
 else
 {
 Centinaia ( gCifre, chkGroup );
 
 
 Decine ( gCifre, chkGroup );
 
 
 Gruppi ( gCifre, chkGroup );
 
 
 }
 
 }
 
 
 if (zero == numGruppi)
 cout << cifre19[0];
 
 
 cout << endl;
 
 }
 
 void Centinaia ( int cifre[], int group )
 {
 
 
 if ((cifre[group]/100) > 1)
 cout << cifre19[ (cifre[group]/100) ];   // "due"..."nove"
 
 
 if ((cifre[group]/100) > 0)
 {
 if (((cifre[group]%100)/10) == 8 )
 cout << "cent";
 else cout << "cento";
 }
 
 }
 
 
 
 void Decine ( int cifre[], int group )
 {
 
 
 if (((cifre[group]%100) < 20) && ((cifre[group]%100) > 0))
 {
 
 if ( (group == 0)
 || ((group > 0) && (cifre[group] != 1)) )
 cout << cifre19[ (cifre[group]%100) ];
 
 }
 else
 {
 
 if ( ((cifre[group]%100) > 20) &&
 (((cifre[group]%10) == 1) || ((cifre[group]%10) == 8)) )
 {
 char temp[9] = "";
 
 cout << strncpy ( temp,
 decine[ (((cifre[group]%100)/10) - 2) ],
 (strlen (decine[ (((cifre[group]%100)/10) - 2) ]) -1));
 }
 
 else if ((cifre[group]%100) >= 20)
 cout << decine[ (((cifre[group]%100)/10) - 2) ];
 
 if (((cifre[group]%100)%10) > 0)
 cout << cifre19 [ ((cifre[group]%100)%10) ];
 
 }
 
 }
 
 
 
 
 void Gruppi ( int cifre[], int group )
 {
 if (group > 0)
 {
 if (cifre[group] > 1)
 cout << gruppoName[ group-1 ];
 
 else cout << irregular[ group-1 ];
 }
 
 }
 
 
 
 
 
 int main()
 {
 
 char input[numGruppi*3];
 
 cout << "Digita un intero (max " << (numGruppi*3) << " cifre): ";
 cin >> input;
 
 if (Cifra ( input ) == true)
 {
 
 moveEfondo ( input, numGruppi*3 );
 
 cout << endl;
 
 
 ConvLetter ( input, numGruppi*3 );
 
 }
 
 else
 {
 cout << endl
 << "ERRORE: Input non valido!" << endl
 << "Riavviare il programma e digitare soltanto numeri."
 << endl << endl;
 }
 system("PAUSE");
 return 0;
 }
 | 
 
 E questo è quello che io ho fatto in C
 
  	  | Codice: |  	  | #include <stdio.h> #include <stdlib.h>
 #include <string.h>
 
 
 const int numGruppi = 3;
 const char *gruppoName[] = { "mila", "milioni" };
 const char *irregular[] = { "mille", "unmilione" };
 
 const char *cifre19[] = {
 "zero",
 "uno",
 "due",
 "tre",
 "quattro",
 "cinque",
 "sei",
 "sette",
 "otto",
 "nove",
 "dieci",
 "undici",
 "dodici",
 "tredici",
 "quattordici",
 "quindici",
 "sedici",
 "diciassette",
 "diciotto",
 "diciannove"
 };
 
 const char *decine[] = {
 "venti",
 "trenta",
 "quaranta",
 "cinquanta",
 "sessanta",
 "settanta",
 "ottanta",
 "novanta"
 };
 
 
 
 int Cifra ( const char *ch );
 int moveEfondo ( char array[], int size );
 void ConvLetter ( const char cifreIn[], int size );
 
 int Cifra ( const char *str )
 {
 
 for( ; *str != '\0'; str++)
 {
 if ((*str < 48) || (*str > 57))
 return 0;
 }
 
 return 1;
 
 
 }
 
 int moveEfondo ( char array[], int size )
 {
 int i,j;
 int lungChars = strlen ( array ),
 sposta = (size-1);
 
 if (lungChars < size)
 {
 for (i=0; i < lungChars; i++)
 {
 array[sposta] = array[((lungChars-1)-i)];
 sposta--;
 }
 
 for (j=0; j < (size-lungChars); j++)
 array[j] = 48;
 }
 
 if (size < 1)
 return -1;
 
 else return 0;
 }
 
 
 void ConvLetter ( const char cifreIn[], int size )
 {
 
 
 void Centinaia ( int cifre[], int group );
 void Decine ( int cifre[], int group );
 void Gruppi ( int cifre[], int group );
 
 
 int gCifre [numGruppi];
 
 
 
 int gruppo,copia;
 for (gruppo=(numGruppi-1), copia=0; gruppo >= 0; gruppo--, copia += 3)
 {
 
 
 gCifre[gruppo] = ( (cifreIn[copia]-48)*100 +
 (cifreIn[copia+1]-48)*10 +
 (cifreIn[copia+2]-48) );
 }
 
 
 int zero = 0;
 
 int chkGroup;
 for (chkGroup=(numGruppi-1); chkGroup >= 0; chkGroup--)
 {
 
 if (gCifre[chkGroup] == 0)
 zero++;
 
 else
 {
 Centinaia ( gCifre, chkGroup );
 
 
 Decine ( gCifre, chkGroup );
 
 
 Gruppi ( gCifre, chkGroup );
 
 
 }
 
 }
 
 
 if (zero == numGruppi)
 printf("%c",cifre19[0]);
 
 
 // cout << endl;
 
 }
 
 void Centinaia ( int cifre[], int group )
 {
 
 
 if ((cifre[group]/100) > 1)
 printf("%c",cifre19[ (cifre[group]/100) ]);   // "due"..."nove"
 
 
 if ((cifre[group]/100) > 0)
 {
 if (((cifre[group]%100)/10) == 8 )
 printf("cent");
 else printf("cento");
 }
 
 }
 
 
 
 void Decine ( int cifre[], int group )
 {
 
 
 if (((cifre[group]%100) < 20) && ((cifre[group]%100) > 0))
 {
 
 if ( (group == 0)
 || ((group > 0) && (cifre[group] != 1)) )
 printf("%c",cifre19[ (cifre[group]/100) ]);
 
 }
 else
 {
 
 if ( ((cifre[group]%100) > 20) &&
 (((cifre[group]%10) == 1) || ((cifre[group]%10) == 8)) )
 {
 char temp[9] = "";
 
 printf("%c",temp,decine[ (((cifre[group]%100)/10) - 2) ],(strlen (decine[ (((cifre[group]%100)/10) - 2) ]) -1));
 //cout << strncpy ( temp,
 //                  decine[ (((cifre[group]%100)/10) - 2) ],
 //                  (strlen (decine[ (((cifre[group]%100)/10) - 2) ]) -1));
 }
 
 else if ((cifre[group]%100) >= 20)
 printf("%c",decine[ (((cifre[group]%100)/10) - 2) ]);
 //cout << decine[ (((cifre[group]%100)/10) - 2) ];
 
 if (((cifre[group]%100)%10) > 0)
 printf("%c",cifre19 [ ((cifre[group]%100)%10) ]);
 //cout << cifre19 [ ((cifre[group]%100)%10) ];
 
 }
 
 }
 
 
 
 
 void Gruppi ( int cifre[], int group )
 {
 if (group > 0)
 {
 if (cifre[group] > 1)
 printf("%c",gruppoName[ group-1 ]);
 
 else printf("%c",irregular[ group-1 ]);
 }
 }
 
 
 
 
 
 int main()
 {
 
 char input[numGruppi*3];
 int a = numGruppi*3;
 printf("Digita un intero max %d cifre: ",a);
 
 scanf("%c",&input);
 if (Cifra ( input ) == 1)
 {
 
 moveEfondo ( input, numGruppi*3 );
 
 printf("\n");
 
 ConvLetter ( input, numGruppi*3 );
 
 }
 
 else
 {
 printf("ERRORE: Input non valido! \nRiavviare il programma e digitare soltanto numeri.");
 }
 system("PAUSE");
 return 0;
 }
 
 | 
 
 Solo che il codice in C parte ma non converte i numeri in lettere come dovrebbe, potreste dirmi dove ho sbagliato
  ? Grazie in anticipo  |  |