Affichage d'un resultat char?

Résolu
tenohthree Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
comment afficher la variable de sortie "lettre" qui est de type chaine de caractère ?

voila le code :

#include<stdio.h>
#include<string.h>
 
void main()
 {
 int centaine, dizaine, unite, reste, y,i,chiffre;
 char *lettre ;
 strcpy(lettre, "");
 reste = chiffre;
 printf("donner le chiffre");
 scanf("%d",&chiffre);
 
 
 for(i=1000000000; i>=1; i/=1000)
 {
 y = reste/i;
 if(y!=0)
 {
 centaine = y/100;
 dizaine = (y - centaine*100)/10;
 unite = y-(centaine*100)-(dizaine*10);
 switch(centaine)
 {
 case 0:
 break;
 case 1:
 strcat(lettre,"cent ");
 break;
 case 2:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"deux cents ");
 else strcat(lettre,"deux cent ");
 break;
 case 3:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"trois cents ");
 else strcat(lettre,"trois cent ");
 break;
 case 4:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"quatre cents ");
 else strcat(lettre,"quatre cent ");
 break;
 case 5:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"cinq cents ");
 else strcat(lettre,"cinq cent ");
 break;
 case 6:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"six cents ");
 else strcat(lettre,"six cent ");
 break;
 case 7:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"sept cents ");
 else strcat(lettre,"sept cent ");
 break;
 case 8:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"huit cents ");
 else strcat(lettre,"huit cent ");
 break;
 case 9:
 if((dizaine == 0)&&(unite == 0)) strcat(lettre,"neuf cents ");
 else strcat(lettre,"neuf cent ");
 }// endSwitch(centaine)
 
 switch(dizaine)
 {
 case 0:
 break;
 case 1:
 if(unite=0) strcat(lettre,"dix");
 break;
 case 2:
 strcat(lettre,"vingt ");
 break;
 case 3:
 strcat(lettre,"trente ");
 break;
 case 4:
 strcat(lettre,"quarante ");
 break;
 case 5:
 strcat(lettre,"cinquante ");
 break;
 case 6:
 strcat(lettre,"soixante ");
 break;
 case 7:
 strcat (lettre,"soixante-dix ");
 break;
 case 8:
 strcat(lettre,"quatre-vingt ");
 break;
 case 9:
 strcat(lettre,"quatre-vingt-dix ");
 } // endSwitch(dizaine)
 
 switch(unite)
 {
 case 0:
 break;
 case 1:
 if(dizaine = 1) strcat(lettre,"onze ");
 else strcat(lettre,"un ");
 break;
 case 2:
 if(dizaine = 1) strcat(lettre,"douze ");
 else strcat(lettre,"deux ");
 break;
 case 3:
 if(dizaine = 1) strcat(lettre,"treize ");
 else strcat(lettre,"trois ");
 break;
 case 4:
 if(dizaine = 1) strcat(lettre,"quatorze ");
 else strcat(lettre,"quatre ");
 break;
 case 5:
 if(dizaine = 1) strcat(lettre,"quinze ");
 else strcat(lettre,"cinq ");
 break;
 case 6:
 if(dizaine = 1) strcat(lettre,"seize ");
 else strcat(lettre,"six ");
 break;
 case 7:
 if(dizaine = 1) strcat(lettre,"dix-sept ");
 else strcat(lettre,"sept ");
 break;
 case 8:
 if(dizaine = 1) strcat(lettre,"dix-huit ");
 else strcat(lettre,"huit ");
 break;
 case 9:
 if(dizaine = 1) strcat(lettre,"dix-neuf ");
 else strcat(lettre,"neuf ");
 } // endSwitch(unite)
 
 switch (i)
 {
 case 1000000000:
 if(y>1) strcat(lettre,"milliards ");
 else strcat(lettre,"milliard ");
 break;
 case 1000000:
 if(y>1) strcat(lettre,"millions ");
 else strcat(lettre,"million ");
 break;
 case 1000:
 strcat(lettre,"mille ");
 }
 } // end if(y!=0)
 reste -= y*i;
 } // end for
 //if(strlen(lettre)==0) strcpy(lettre,"zero");
 
 printf("le nobre est %s\n ",lettre);
 
 }


en plus peut on utiliser
char  lettre;
au lieu de
 char *lettre;
?

Merci d'avance.
A voir également:

4 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Il n'y a pas de remplacement à faire. Déclarer 'char* lettre' ne fait que déclarer un emplacement où mettre une adresse qui contiendra des 'char', mais il est où l'emplacement ? Nulle part (ou plutôt n'importe où) et c'est là le problème. Il faut donc créer un emplacement et donner l'adresse de cet emplacement à lettre. Cela s'appelle une allocation mémoire. Par exemple:
 char* lettre = malloc(taille*sizeof(char));
'taille' étant la longueur maxi de la chaîne de caractères qui pourra y être placée; en fait 'taille = longueur maxi + 1' car la chaine doit se terminer par un caractère de fin de chaîne ('\0').
en plus je vous informe qu'il n'ay pas d'affichage on utilisant
printf("le nombre est %s\n ",lettre);

C'est sans doute parce qu'il n'y a rien dans lettre. Si tu as pensé y mettre quelquechose, il n'y a plus rien car comme aucun emplacement n'avait été réservé, là où tu avais mis quelquechose l'emplacement a été utilisé par autre chose qui a donc écrasé ce que tu y avais mis. Est-ce clair ?
Bonne réflexion.
1
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
char *lettre ;
strcpy(lettre, "");

A la lecture de ces deux lignes, on sent le 'segment fault' qui pointe son nez ;-)
A corriger d'urgence !
comment afficher la variable de sortie "lettre" qui est de type chaine de caractère ?
Mais tu as donné la réponse à la fin;
printf("le nobre est %s\n ",lettre);

en plus peut on utiliser 'char lettre;' au lieu de 'char *lettre;'
Oh que nenni !
'char lettre' est une variable de type 'char', c'est à dire qu'en mémoire sera réservé un emplacement dans lequel on pourra mettre un 'char', alors que 'char* lettre' est une variable de type 'pointeur vers char', c'est-à-dire qu'en mémoire sera réservé un emplacement dans lequel on pourra mettre une adresse supposée pointer vers un emplacement supposé contenir des 'char'.

Bonne réflexion.
0
tenohthree Messages postés 50 Date d'inscription   Statut Membre Dernière intervention  
 
comment je peut corriger ?par quoi je le remplace?
char *lettre ;
strcpy(lettre, ""); 

en plus je vous informe qu'il n'ay pas d'affichage on utilisant
 printf("le nombre est %s\n ",lettre);

ni
 printf("le nombre est %s\n ",&lettre);
0
tenohthree Messages postés 50 Date d'inscription   Statut Membre Dernière intervention  
 
ok j'ai remplacer par
char lettre[256];
strcpy(lettre, ""); 

es ce que ça va comme ça?
0