Débutant en C

Résolu
AlKiir Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -  
AlKiir Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'essaie de coder un petit programme en C:
On tape un texte (a la console pour le moment)
Certaines lettres du textes sont changées (ici le a, b, c et d)


code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
char *text;
int pos=0;

scanf("%s", text);

do
{
if (text[pos]="a")
{
text[pos]="+";
}
if (text[pos]="b")
{
text[pos]="-";
}
if (text[pos]="c")
{
text[pos]="×";
}
if (text[pos]="d")
{
text[pos]="÷";
}
pos++;
}
while(pos <20);



printf("%d", text);




return 0;
}

Donc je ne voie pas du tout ou ca ne marche pas
Un conseil?
Merci

6 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Plusieurs erreurs dans ton code :
char *text; scanf("%s", text);
Aucune allocation de faite, donc ça peut envoyer un joli segfault. Tu peux passer par un tableau plutôt que d'utiliser une allocation dynamique. Par exemple :
char text[20]; scanf("%19s",text);


if (text[pos]="a")
Plusieurs erreurs dans cette ligne. Tu souhaites comparer un char avec une chaîne de caractères, ce qui n'est pas possible. Si tu veux tester text[pos] avec le caractère 'a', tu dois utiliser les apostrophes, et utiliser l'opérateur de comparaison (double égal). L'opérateur simple égal sert pour l'affectation.
Ce qui donnerait : if(text[pos]=='a')

text[pos]="+";
Ici tu souhaites réaliser une affectation, donc il s'agit effectivement du simple opérateur égal. Mais tu souhaites affecter un caractère et non une chaîne. Il faut donc utiliser l'integer '+' (entre apostrophe).
Soit : text[pos]='+';

De même pour l'ensemble des if et de leurs blocs.

printf("%d", text);
Et enfin pour afficher, une chaîne, il faut utiliser %s et non %d.
Correction : printf("%s", text);


Sinon d'une manière générale sur ton code, tu pourrais utiliser un switch pour la clarté. ;-))).

Cdlt
1
jose23
 
char * text est un pointeur et il n'y a pas d'allocation de mémoire !
il suffit de declarer un tableau char text[21] ;
0
AlKiir Messages postés 42 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, ca ne plante déjà plus, mais je n'obtiens toujours pas le résultat prévus lol
maintenant j'ai un résultat qu'avec des +++++
Merci pour votre temps
0
java4ever
 
bonjour,
c'est normal que tu ai des +++, une string s'imprime avec %s et pas %d
remplace par printf("%s", text); et ça devrait aller mieux !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
i.amghari5 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   2
 
tu doit mettre à la fin du programme getch(); avant return0;
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Vaut mieux mettre getchar() car getch() n'est pas portable.
D'ailleurs, il faudrait mettre deux getchar() à cause du '\n' stocké dans le buffer à cause du scanf.
0
AlKiir Messages postés 42 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup! ca marche super maintenan
0