Débutant en C

Résolu
AlKiir Messages postés 43 Statut Membre -  
AlKiir Messages postés 43 Statut Membre -
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 11653 Statut Contributeur 1 847
 
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 43 Statut Membre
 
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 30 Statut Membre 2
 
tu doit mettre à la fin du programme getch(); avant return0;
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
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 43 Statut Membre
 
Merci beaucoup! ca marche super maintenan
0